/rust/registry/src/github.com-1ecc6299db9ec823/wasmtime-1.0.2/src/func.rs
Line | Count | Source (jump to first uncovered line) |
1 | | use crate::store::{StoreData, StoreOpaque, Stored}; |
2 | | use crate::{ |
3 | | AsContext, AsContextMut, CallHook, Engine, Extern, FuncType, Instance, StoreContext, |
4 | | StoreContextMut, Trap, Val, ValRaw, ValType, |
5 | | }; |
6 | | use anyhow::{bail, Context as _, Result}; |
7 | | use std::future::Future; |
8 | | use std::mem; |
9 | | use std::panic::{self, AssertUnwindSafe}; |
10 | | use std::pin::Pin; |
11 | | use std::ptr::NonNull; |
12 | | use std::sync::Arc; |
13 | | use wasmtime_runtime::{ |
14 | | raise_user_trap, ExportFunction, InstanceHandle, VMCallerCheckedAnyfunc, VMContext, |
15 | | VMFunctionBody, VMFunctionImport, VMHostFuncContext, VMOpaqueContext, VMSharedSignatureIndex, |
16 | | VMTrampoline, |
17 | | }; |
18 | | |
19 | | /// A WebAssembly function which can be called. |
20 | | /// |
21 | | /// This type can represent either an exported function from a WebAssembly |
22 | | /// module or a host-defined function which can be used to satisfy an import of |
23 | | /// a module. [`Func`] and can be used to both instantiate an [`Instance`] as |
24 | | /// well as be extracted from an [`Instance`]. |
25 | | /// |
26 | | /// [`Instance`]: crate::Instance |
27 | | /// |
28 | | /// A [`Func`] "belongs" to the store that it was originally created within. |
29 | | /// Operations on a [`Func`] only work with the store it belongs to, and if |
30 | | /// another store is passed in by accident then methods will panic. |
31 | | /// |
32 | | /// # `Func` and `async` |
33 | | /// |
34 | | /// Functions from the perspective of WebAssembly are always synchronous. You |
35 | | /// might have an `async` function in Rust, however, which you'd like to make |
36 | | /// available from WebAssembly. Wasmtime supports asynchronously calling |
37 | | /// WebAssembly through native stack switching. You can get some more |
38 | | /// information about [asynchronous configs](crate::Config::async_support), but |
39 | | /// from the perspective of `Func` it's important to know that whether or not |
40 | | /// your [`Store`](crate::Store) is asynchronous will dictate whether you call |
41 | | /// functions through [`Func::call`] or [`Func::call_async`] (or the typed |
42 | | /// wrappers such as [`TypedFunc::call`] vs [`TypedFunc::call_async`]). |
43 | | /// |
44 | | /// # To `Func::call` or to `Func::typed().call()` |
45 | | /// |
46 | | /// There's a 2x2 matrix of methods to call [`Func`]. Invocations can either be |
47 | | /// asynchronous or synchronous. They can also be statically typed or not. |
48 | | /// Whether or not an invocation is asynchronous is indicated via the method |
49 | | /// being `async` and [`call_async`](Func::call_async) being the entry point. |
50 | | /// Otherwise for statically typed or not your options are: |
51 | | /// |
52 | | /// * Dynamically typed - if you don't statically know the signature of the |
53 | | /// function that you're calling you'll be using [`Func::call`] or |
54 | | /// [`Func::call_async`]. These functions take a variable-length slice of |
55 | | /// "boxed" arguments in their [`Val`] representation. Additionally the |
56 | | /// results are returned as an owned slice of [`Val`]. These methods are not |
57 | | /// optimized due to the dynamic type checks that must occur, in addition to |
58 | | /// some dynamic allocations for where to put all the arguments. While this |
59 | | /// allows you to call all possible wasm function signatures, if you're |
60 | | /// looking for a speedier alternative you can also use... |
61 | | /// |
62 | | /// * Statically typed - if you statically know the type signature of the wasm |
63 | | /// function you're calling, then you'll want to use the [`Func::typed`] |
64 | | /// method to acquire an instance of [`TypedFunc`]. This structure is static proof |
65 | | /// that the underlying wasm function has the ascripted type, and type |
66 | | /// validation is only done once up-front. The [`TypedFunc::call`] and |
67 | | /// [`TypedFunc::call_async`] methods are much more efficient than [`Func::call`] |
68 | | /// and [`Func::call_async`] because the type signature is statically known. |
69 | | /// This eschews runtime checks as much as possible to get into wasm as fast |
70 | | /// as possible. |
71 | | /// |
72 | | /// # Examples |
73 | | /// |
74 | | /// One way to get a `Func` is from an [`Instance`] after you've instantiated |
75 | | /// it: |
76 | | /// |
77 | | /// ``` |
78 | | /// # use wasmtime::*; |
79 | | /// # fn main() -> anyhow::Result<()> { |
80 | | /// let engine = Engine::default(); |
81 | | /// let module = Module::new(&engine, r#"(module (func (export "foo")))"#)?; |
82 | | /// let mut store = Store::new(&engine, ()); |
83 | | /// let instance = Instance::new(&mut store, &module, &[])?; |
84 | | /// let foo = instance.get_func(&mut store, "foo").expect("export wasn't a function"); |
85 | | /// |
86 | | /// // Work with `foo` as a `Func` at this point, such as calling it |
87 | | /// // dynamically... |
88 | | /// match foo.call(&mut store, &[], &mut []) { |
89 | | /// Ok(()) => { /* ... */ } |
90 | | /// Err(trap) => { |
91 | | /// panic!("execution of `foo` resulted in a wasm trap: {}", trap); |
92 | | /// } |
93 | | /// } |
94 | | /// foo.call(&mut store, &[], &mut [])?; |
95 | | /// |
96 | | /// // ... or we can make a static assertion about its signature and call it. |
97 | | /// // Our first call here can fail if the signatures don't match, and then the |
98 | | /// // second call can fail if the function traps (like the `match` above). |
99 | | /// let foo = foo.typed::<(), (), _>(&store)?; |
100 | | /// foo.call(&mut store, ())?; |
101 | | /// # Ok(()) |
102 | | /// # } |
103 | | /// ``` |
104 | | /// |
105 | | /// You can also use the [`wrap` function](Func::wrap) to create a |
106 | | /// `Func` |
107 | | /// |
108 | | /// ``` |
109 | | /// # use wasmtime::*; |
110 | | /// # fn main() -> anyhow::Result<()> { |
111 | | /// let mut store = Store::<()>::default(); |
112 | | /// |
113 | | /// // Create a custom `Func` which can execute arbitrary code inside of the |
114 | | /// // closure. |
115 | | /// let add = Func::wrap(&mut store, |a: i32, b: i32| -> i32 { a + b }); |
116 | | /// |
117 | | /// // Next we can hook that up to a wasm module which uses it. |
118 | | /// let module = Module::new( |
119 | | /// store.engine(), |
120 | | /// r#" |
121 | | /// (module |
122 | | /// (import "" "" (func $add (param i32 i32) (result i32))) |
123 | | /// (func (export "call_add_twice") (result i32) |
124 | | /// i32.const 1 |
125 | | /// i32.const 2 |
126 | | /// call $add |
127 | | /// i32.const 3 |
128 | | /// i32.const 4 |
129 | | /// call $add |
130 | | /// i32.add)) |
131 | | /// "#, |
132 | | /// )?; |
133 | | /// let instance = Instance::new(&mut store, &module, &[add.into()])?; |
134 | | /// let call_add_twice = instance.get_typed_func::<(), i32, _>(&mut store, "call_add_twice")?; |
135 | | /// |
136 | | /// assert_eq!(call_add_twice.call(&mut store, ())?, 10); |
137 | | /// # Ok(()) |
138 | | /// # } |
139 | | /// ``` |
140 | | /// |
141 | | /// Or you could also create an entirely dynamic `Func`! |
142 | | /// |
143 | | /// ``` |
144 | | /// # use wasmtime::*; |
145 | | /// # fn main() -> anyhow::Result<()> { |
146 | | /// let mut store = Store::<()>::default(); |
147 | | /// |
148 | | /// // Here we need to define the type signature of our `Double` function and |
149 | | /// // then wrap it up in a `Func` |
150 | | /// let double_type = wasmtime::FuncType::new( |
151 | | /// [wasmtime::ValType::I32].iter().cloned(), |
152 | | /// [wasmtime::ValType::I32].iter().cloned(), |
153 | | /// ); |
154 | | /// let double = Func::new(&mut store, double_type, |_, params, results| { |
155 | | /// let mut value = params[0].unwrap_i32(); |
156 | | /// value *= 2; |
157 | | /// results[0] = value.into(); |
158 | | /// Ok(()) |
159 | | /// }); |
160 | | /// |
161 | | /// let module = Module::new( |
162 | | /// store.engine(), |
163 | | /// r#" |
164 | | /// (module |
165 | | /// (import "" "" (func $double (param i32) (result i32))) |
166 | | /// (func $start |
167 | | /// i32.const 1 |
168 | | /// call $double |
169 | | /// drop) |
170 | | /// (start $start)) |
171 | | /// "#, |
172 | | /// )?; |
173 | | /// let instance = Instance::new(&mut store, &module, &[double.into()])?; |
174 | | /// // .. work with `instance` if necessary |
175 | | /// # Ok(()) |
176 | | /// # } |
177 | | /// ``` |
178 | 20.4k | #[derive(Copy, Clone, Debug)] |
179 | | #[repr(transparent)] // here for the C API |
180 | | pub struct Func(Stored<FuncData>); |
181 | | |
182 | | pub(crate) struct FuncData { |
183 | | kind: FuncKind, |
184 | | |
185 | | // This is somewhat expensive to load from the `Engine` and in most |
186 | | // optimized use cases (e.g. `TypedFunc`) it's not actually needed or it's |
187 | | // only needed rarely. To handle that this is an optionally-contained field |
188 | | // which is lazily loaded into as part of `Func::call`. |
189 | | // |
190 | | // Also note that this is intentionally placed behind a pointer to keep it |
191 | | // small as `FuncData` instances are often inserted into a `Store`. |
192 | | ty: Option<Box<FuncType>>, |
193 | | } |
194 | | |
195 | | /// The three ways that a function can be created and referenced from within a |
196 | | /// store. |
197 | | enum FuncKind { |
198 | | /// A function already owned by the store via some other means. This is |
199 | | /// used, for example, when creating a `Func` from an instance's exported |
200 | | /// function. The instance's `InstanceHandle` is already owned by the store |
201 | | /// and we just have some pointers into that which represent how to call the |
202 | | /// function. |
203 | | StoreOwned { |
204 | | trampoline: VMTrampoline, |
205 | | export: ExportFunction, |
206 | | }, |
207 | | |
208 | | /// A function is shared across possibly other stores, hence the `Arc`. This |
209 | | /// variant happens when a `Linker`-defined function is instantiated within |
210 | | /// a `Store` (e.g. via `Linker::get` or similar APIs). The `Arc` here |
211 | | /// indicates that there's some number of other stores holding this function |
212 | | /// too, so dropping this may not deallocate the underlying |
213 | | /// `InstanceHandle`. |
214 | | SharedHost(Arc<HostFunc>), |
215 | | |
216 | | /// A uniquely-owned host function within a `Store`. This comes about with |
217 | | /// `Func::new` or similar APIs. The `HostFunc` internally owns the |
218 | | /// `InstanceHandle` and that will get dropped when this `HostFunc` itself |
219 | | /// is dropped. |
220 | | /// |
221 | | /// Note that this is intentionally placed behind a `Box` to minimize the |
222 | | /// size of this enum since the most common variant for high-peformance |
223 | | /// situations is `SharedHost` and `StoreOwned`, so this ideally isn't |
224 | | /// larger than those two. |
225 | | Host(Box<HostFunc>), |
226 | | |
227 | | /// A reference to a `HostFunc`, but one that's "rooted" in the `Store` |
228 | | /// itself. |
229 | | /// |
230 | | /// This variant is created when an `InstancePre<T>` is instantiated in to a |
231 | | /// `Store<T>`. In that situation the `InstancePre<T>` already has a list of |
232 | | /// host functions that are packaged up in an `Arc`, so the `Arc<[T]>` is |
233 | | /// cloned once into the `Store` to avoid each individual function requiring |
234 | | /// an `Arc::clone`. |
235 | | /// |
236 | | /// The lifetime management of this type is `unsafe` because |
237 | | /// `RootedHostFunc` is a small wrapper around `NonNull<HostFunc>`. To be |
238 | | /// safe this is required that the memory of the host function is pinned |
239 | | /// elsewhere (e.g. the `Arc` in the `Store`). |
240 | | RootedHost(RootedHostFunc), |
241 | | } |
242 | | |
243 | | macro_rules! for_each_function_signature { |
244 | | ($mac:ident) => { |
245 | | $mac!(0); |
246 | | $mac!(1 A1); |
247 | | $mac!(2 A1 A2); |
248 | | $mac!(3 A1 A2 A3); |
249 | | $mac!(4 A1 A2 A3 A4); |
250 | | $mac!(5 A1 A2 A3 A4 A5); |
251 | | $mac!(6 A1 A2 A3 A4 A5 A6); |
252 | | $mac!(7 A1 A2 A3 A4 A5 A6 A7); |
253 | | $mac!(8 A1 A2 A3 A4 A5 A6 A7 A8); |
254 | | $mac!(9 A1 A2 A3 A4 A5 A6 A7 A8 A9); |
255 | | $mac!(10 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10); |
256 | | $mac!(11 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11); |
257 | | $mac!(12 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12); |
258 | | $mac!(13 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13); |
259 | | $mac!(14 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14); |
260 | | $mac!(15 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15); |
261 | | $mac!(16 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 A16); |
262 | | }; |
263 | | } |
264 | | |
265 | | mod typed; |
266 | | pub use typed::*; |
267 | | |
268 | | macro_rules! generate_wrap_async_func { |
269 | | ($num:tt $($args:ident)*) => (paste::paste!{ |
270 | | /// Same as [`Func::wrap`], except the closure asynchronously produces |
271 | | /// its result. For more information see the [`Func`] documentation. |
272 | | /// |
273 | | /// # Panics |
274 | | /// |
275 | | /// This function will panic if called with a non-asynchronous store. |
276 | | #[allow(non_snake_case)] |
277 | | #[cfg(feature = "async")] |
278 | | #[cfg_attr(nightlydoc, doc(cfg(feature = "async")))] |
279 | | pub fn [<wrap $num _async>]<T, $($args,)* R>( |
280 | | store: impl AsContextMut<Data = T>, |
281 | | func: impl for<'a> Fn(Caller<'a, T>, $($args),*) -> Box<dyn Future<Output = R> + Send + 'a> + Send + Sync + 'static, |
282 | | ) -> Func |
283 | | where |
284 | | $($args: WasmTy,)* |
285 | | R: WasmRet, |
286 | | { |
287 | | assert!(store.as_context().async_support(), concat!("cannot use `wrap", $num, "_async` without enabling async support on the config")); |
288 | | Func::wrap(store, move |mut caller: Caller<'_, T>, $($args: $args),*| { |
289 | | let async_cx = caller.store.as_context_mut().0.async_cx().expect("Attempt to start async function on dying fiber"); |
290 | | let mut future = Pin::from(func(caller, $($args),*)); |
291 | | |
292 | | match unsafe { async_cx.block_on(future.as_mut()) } { |
293 | | Ok(ret) => ret.into_fallible(), |
294 | | Err(e) => R::fallible_from_trap(e), |
295 | | } |
296 | | }) |
297 | | } |
298 | | }) |
299 | | } |
300 | | |
301 | | impl Func { |
302 | | /// Creates a new `Func` with the given arguments, typically to create a |
303 | | /// host-defined function to pass as an import to a module. |
304 | | /// |
305 | | /// * `store` - the store in which to create this [`Func`], which will own |
306 | | /// the return value. |
307 | | /// |
308 | | /// * `ty` - the signature of this function, used to indicate what the |
309 | | /// inputs and outputs are. |
310 | | /// |
311 | | /// * `func` - the native code invoked whenever this `Func` will be called. |
312 | | /// This closure is provided a [`Caller`] as its first argument to learn |
313 | | /// information about the caller, and then it's passed a list of |
314 | | /// parameters as a slice along with a mutable slice of where to write |
315 | | /// results. |
316 | | /// |
317 | | /// Note that the implementation of `func` must adhere to the `ty` signature |
318 | | /// given, error or traps may occur if it does not respect the `ty` |
319 | | /// signature. For example if the function type declares that it returns one |
320 | | /// i32 but the `func` closures does not write anything into the results |
321 | | /// slice then a trap may be generated. |
322 | | /// |
323 | | /// Additionally note that this is quite a dynamic function since signatures |
324 | | /// are not statically known. For a more performant and ergonomic `Func` |
325 | | /// it's recommended to use [`Func::wrap`] if you can because with |
326 | | /// statically known signatures Wasmtime can optimize the implementation |
327 | | /// much more. |
328 | | /// |
329 | | /// For more information about `Send + Sync + 'static` requirements on the |
330 | | /// `func`, see [`Func::wrap`](#why-send--sync--static). |
331 | | #[cfg(compiler)] |
332 | | #[cfg_attr(nightlydoc, doc(cfg(feature = "cranelift")))] // see build.rs |
333 | 0 | pub fn new<T>( |
334 | 0 | store: impl AsContextMut<Data = T>, |
335 | 0 | ty: FuncType, |
336 | 0 | func: impl Fn(Caller<'_, T>, &[Val], &mut [Val]) -> Result<(), Trap> + Send + Sync + 'static, |
337 | 0 | ) -> Self { |
338 | 0 | let ty_clone = ty.clone(); |
339 | 0 | unsafe { |
340 | 0 | Func::new_unchecked(store, ty, move |caller, values| { |
341 | 0 | Func::invoke(caller, &ty_clone, values, &func) |
342 | 0 | }) |
343 | 0 | } |
344 | 0 | } |
345 | | |
346 | | /// Creates a new [`Func`] with the given arguments, although has fewer |
347 | | /// runtime checks than [`Func::new`]. |
348 | | /// |
349 | | /// This function takes a callback of a different signature than |
350 | | /// [`Func::new`], instead receiving a raw pointer with a list of [`ValRaw`] |
351 | | /// structures. These values have no type information associated with them |
352 | | /// so it's up to the caller to provide a function that will correctly |
353 | | /// interpret the list of values as those coming from the `ty` specified. |
354 | | /// |
355 | | /// If you're calling this from Rust it's recommended to either instead use |
356 | | /// [`Func::new`] or [`Func::wrap`]. The [`Func::wrap`] API, in particular, |
357 | | /// is both safer and faster than this API. |
358 | | /// |
359 | | /// # Unsafety |
360 | | /// |
361 | | /// This function is not safe because it's not known at compile time that |
362 | | /// the `func` provided correctly interprets the argument types provided to |
363 | | /// it, or that the results it produces will be of the correct type. |
364 | | #[cfg(compiler)] |
365 | | #[cfg_attr(nightlydoc, doc(cfg(feature = "cranelift")))] // see build.rs |
366 | 0 | pub unsafe fn new_unchecked<T>( |
367 | 0 | mut store: impl AsContextMut<Data = T>, |
368 | 0 | ty: FuncType, |
369 | 0 | func: impl Fn(Caller<'_, T>, &mut [ValRaw]) -> Result<(), Trap> + Send + Sync + 'static, |
370 | 0 | ) -> Self { |
371 | 0 | let store = store.as_context_mut().0; |
372 | 0 | let host = HostFunc::new_unchecked(store.engine(), ty, func); |
373 | 0 | host.into_func(store) |
374 | 0 | } |
375 | | |
376 | | /// Creates a new host-defined WebAssembly function which, when called, |
377 | | /// will run the asynchronous computation defined by `func` to completion |
378 | | /// and then return the result to WebAssembly. |
379 | | /// |
380 | | /// This function is the asynchronous analogue of [`Func::new`] and much of |
381 | | /// that documentation applies to this as well. The key difference is that |
382 | | /// `func` returns a future instead of simply a `Result`. Note that the |
383 | | /// returned future can close over any of the arguments, but it cannot close |
384 | | /// over the state of the closure itself. It's recommended to store any |
385 | | /// necessary async state in the `T` of the [`Store<T>`](crate::Store) which |
386 | | /// can be accessed through [`Caller::data`] or [`Caller::data_mut`]. |
387 | | /// |
388 | | /// For more information on `Send + Sync + 'static`, see |
389 | | /// [`Func::wrap`](#why-send--sync--static). |
390 | | /// |
391 | | /// # Panics |
392 | | /// |
393 | | /// This function will panic if `store` is not associated with an [async |
394 | | /// config](crate::Config::async_support). |
395 | | /// |
396 | | /// # Examples |
397 | | /// |
398 | | /// ``` |
399 | | /// # use wasmtime::*; |
400 | | /// # fn main() -> anyhow::Result<()> { |
401 | | /// // Simulate some application-specific state as well as asynchronous |
402 | | /// // functions to query that state. |
403 | | /// struct MyDatabase { |
404 | | /// // ... |
405 | | /// } |
406 | | /// |
407 | | /// impl MyDatabase { |
408 | | /// async fn get_row_count(&self) -> u32 { |
409 | | /// // ... |
410 | | /// # 100 |
411 | | /// } |
412 | | /// } |
413 | | /// |
414 | | /// let my_database = MyDatabase { |
415 | | /// // ... |
416 | | /// }; |
417 | | /// |
418 | | /// // Using `new_async` we can hook up into calling our async |
419 | | /// // `get_row_count` function. |
420 | | /// let engine = Engine::new(Config::new().async_support(true))?; |
421 | | /// let mut store = Store::new(&engine, MyDatabase { |
422 | | /// // ... |
423 | | /// }); |
424 | | /// let get_row_count_type = wasmtime::FuncType::new( |
425 | | /// None, |
426 | | /// Some(wasmtime::ValType::I32), |
427 | | /// ); |
428 | | /// let get = Func::new_async(&mut store, get_row_count_type, |caller, _params, results| { |
429 | | /// Box::new(async move { |
430 | | /// let count = caller.data().get_row_count().await; |
431 | | /// results[0] = Val::I32(count as i32); |
432 | | /// Ok(()) |
433 | | /// }) |
434 | | /// }); |
435 | | /// // ... |
436 | | /// # Ok(()) |
437 | | /// # } |
438 | | /// ``` |
439 | | #[cfg(all(feature = "async", feature = "cranelift"))] |
440 | | #[cfg_attr(nightlydoc, doc(cfg(all(feature = "async", feature = "cranelift"))))] |
441 | | pub fn new_async<T, F>(store: impl AsContextMut<Data = T>, ty: FuncType, func: F) -> Func |
442 | | where |
443 | | F: for<'a> Fn( |
444 | | Caller<'a, T>, |
445 | | &'a [Val], |
446 | | &'a mut [Val], |
447 | | ) -> Box<dyn Future<Output = Result<(), Trap>> + Send + 'a> |
448 | | + Send |
449 | | + Sync |
450 | | + 'static, |
451 | | { |
452 | | assert!( |
453 | | store.as_context().async_support(), |
454 | | "cannot use `new_async` without enabling async support in the config" |
455 | | ); |
456 | | Func::new(store, ty, move |mut caller, params, results| { |
457 | | let async_cx = caller |
458 | | .store |
459 | | .as_context_mut() |
460 | | .0 |
461 | | .async_cx() |
462 | | .expect("Attempt to spawn new action on dying fiber"); |
463 | | let mut future = Pin::from(func(caller, params, results)); |
464 | | match unsafe { async_cx.block_on(future.as_mut()) } { |
465 | | Ok(Ok(())) => Ok(()), |
466 | | Ok(Err(trap)) | Err(trap) => Err(trap), |
467 | | } |
468 | | }) |
469 | | } |
470 | | |
471 | 0 | pub(crate) unsafe fn from_caller_checked_anyfunc( |
472 | 0 | store: &mut StoreOpaque, |
473 | 0 | raw: *mut VMCallerCheckedAnyfunc, |
474 | 0 | ) -> Option<Func> { |
475 | 0 | let anyfunc = NonNull::new(raw)?; |
476 | 0 | debug_assert!(anyfunc.as_ref().type_index != VMSharedSignatureIndex::default()); |
477 | 0 | let export = ExportFunction { anyfunc }; |
478 | 0 | Some(Func::from_wasmtime_function(export, store)) |
479 | 0 | } |
480 | | |
481 | | /// Creates a new `Func` from the given Rust closure. |
482 | | /// |
483 | | /// This function will create a new `Func` which, when called, will |
484 | | /// execute the given Rust closure. Unlike [`Func::new`] the target |
485 | | /// function being called is known statically so the type signature can |
486 | | /// be inferred. Rust types will map to WebAssembly types as follows: |
487 | | /// |
488 | | /// | Rust Argument Type | WebAssembly Type | |
489 | | /// |---------------------|------------------| |
490 | | /// | `i32` | `i32` | |
491 | | /// | `u32` | `i32` | |
492 | | /// | `i64` | `i64` | |
493 | | /// | `u64` | `i64` | |
494 | | /// | `f32` | `f32` | |
495 | | /// | `f64` | `f64` | |
496 | | /// | (not supported) | `v128` | |
497 | | /// | `Option<Func>` | `funcref` | |
498 | | /// | `Option<ExternRef>` | `externref` | |
499 | | /// |
500 | | /// Any of the Rust types can be returned from the closure as well, in |
501 | | /// addition to some extra types |
502 | | /// |
503 | | /// | Rust Return Type | WebAssembly Return Type | Meaning | |
504 | | /// |-------------------|-------------------------|-----------------------| |
505 | | /// | `()` | nothing | no return value | |
506 | | /// | `T` | `T` | a single return value | |
507 | | /// | `(T1, T2, ...)` | `T1 T2 ...` | multiple returns | |
508 | | /// |
509 | | /// Note that all return types can also be wrapped in `Result<_, Trap>` to |
510 | | /// indicate that the host function can generate a trap as well as possibly |
511 | | /// returning a value. |
512 | | /// |
513 | | /// Finally you can also optionally take [`Caller`] as the first argument of |
514 | | /// your closure. If inserted then you're able to inspect the caller's |
515 | | /// state, for example the [`Memory`](crate::Memory) it has exported so you |
516 | | /// can read what pointers point to. |
517 | | /// |
518 | | /// Note that when using this API, the intention is to create as thin of a |
519 | | /// layer as possible for when WebAssembly calls the function provided. With |
520 | | /// sufficient inlining and optimization the WebAssembly will call straight |
521 | | /// into `func` provided, with no extra fluff entailed. |
522 | | /// |
523 | | /// # Why `Send + Sync + 'static`? |
524 | | /// |
525 | | /// All host functions defined in a [`Store`](crate::Store) (including |
526 | | /// those from [`Func::new`] and other constructors) require that the |
527 | | /// `func` provided is `Send + Sync + 'static`. Additionally host functions |
528 | | /// always are `Fn` as opposed to `FnMut` or `FnOnce`. This can at-a-glance |
529 | | /// feel restrictive since the closure cannot close over as many types as |
530 | | /// before. The reason for this, though, is to ensure that |
531 | | /// [`Store<T>`](crate::Store) can implement both the `Send` and `Sync` |
532 | | /// traits. |
533 | | /// |
534 | | /// Fear not, however, because this isn't as restrictive as it seems! Host |
535 | | /// functions are provided a [`Caller<'_, T>`](crate::Caller) argument which |
536 | | /// allows access to the host-defined data within the |
537 | | /// [`Store`](crate::Store). The `T` type is not required to be any of |
538 | | /// `Send`, `Sync`, or `'static`! This means that you can store whatever |
539 | | /// you'd like in `T` and have it accessible by all host functions. |
540 | | /// Additionally mutable access to `T` is allowed through |
541 | | /// [`Caller::data_mut`]. |
542 | | /// |
543 | | /// Most host-defined [`Func`] values provide closures that end up not |
544 | | /// actually closing over any values. These zero-sized types will use the |
545 | | /// context from [`Caller`] for host-defined information. |
546 | | /// |
547 | | /// # Examples |
548 | | /// |
549 | | /// First up we can see how simple wasm imports can be implemented, such |
550 | | /// as a function that adds its two arguments and returns the result. |
551 | | /// |
552 | | /// ``` |
553 | | /// # use wasmtime::*; |
554 | | /// # fn main() -> anyhow::Result<()> { |
555 | | /// # let mut store = Store::<()>::default(); |
556 | | /// let add = Func::wrap(&mut store, |a: i32, b: i32| a + b); |
557 | | /// let module = Module::new( |
558 | | /// store.engine(), |
559 | | /// r#" |
560 | | /// (module |
561 | | /// (import "" "" (func $add (param i32 i32) (result i32))) |
562 | | /// (func (export "foo") (param i32 i32) (result i32) |
563 | | /// local.get 0 |
564 | | /// local.get 1 |
565 | | /// call $add)) |
566 | | /// "#, |
567 | | /// )?; |
568 | | /// let instance = Instance::new(&mut store, &module, &[add.into()])?; |
569 | | /// let foo = instance.get_typed_func::<(i32, i32), i32, _>(&mut store, "foo")?; |
570 | | /// assert_eq!(foo.call(&mut store, (1, 2))?, 3); |
571 | | /// # Ok(()) |
572 | | /// # } |
573 | | /// ``` |
574 | | /// |
575 | | /// We can also do the same thing, but generate a trap if the addition |
576 | | /// overflows: |
577 | | /// |
578 | | /// ``` |
579 | | /// # use wasmtime::*; |
580 | | /// # fn main() -> anyhow::Result<()> { |
581 | | /// # let mut store = Store::<()>::default(); |
582 | | /// let add = Func::wrap(&mut store, |a: i32, b: i32| { |
583 | | /// match a.checked_add(b) { |
584 | | /// Some(i) => Ok(i), |
585 | | /// None => Err(Trap::new("overflow")), |
586 | | /// } |
587 | | /// }); |
588 | | /// let module = Module::new( |
589 | | /// store.engine(), |
590 | | /// r#" |
591 | | /// (module |
592 | | /// (import "" "" (func $add (param i32 i32) (result i32))) |
593 | | /// (func (export "foo") (param i32 i32) (result i32) |
594 | | /// local.get 0 |
595 | | /// local.get 1 |
596 | | /// call $add)) |
597 | | /// "#, |
598 | | /// )?; |
599 | | /// let instance = Instance::new(&mut store, &module, &[add.into()])?; |
600 | | /// let foo = instance.get_typed_func::<(i32, i32), i32, _>(&mut store, "foo")?; |
601 | | /// assert_eq!(foo.call(&mut store, (1, 2))?, 3); |
602 | | /// assert!(foo.call(&mut store, (i32::max_value(), 1)).is_err()); |
603 | | /// # Ok(()) |
604 | | /// # } |
605 | | /// ``` |
606 | | /// |
607 | | /// And don't forget all the wasm types are supported! |
608 | | /// |
609 | | /// ``` |
610 | | /// # use wasmtime::*; |
611 | | /// # fn main() -> anyhow::Result<()> { |
612 | | /// # let mut store = Store::<()>::default(); |
613 | | /// let debug = Func::wrap(&mut store, |a: i32, b: u32, c: f32, d: i64, e: u64, f: f64| { |
614 | | /// |
615 | | /// println!("a={}", a); |
616 | | /// println!("b={}", b); |
617 | | /// println!("c={}", c); |
618 | | /// println!("d={}", d); |
619 | | /// println!("e={}", e); |
620 | | /// println!("f={}", f); |
621 | | /// }); |
622 | | /// let module = Module::new( |
623 | | /// store.engine(), |
624 | | /// r#" |
625 | | /// (module |
626 | | /// (import "" "" (func $debug (param i32 i32 f32 i64 i64 f64))) |
627 | | /// (func (export "foo") |
628 | | /// i32.const -1 |
629 | | /// i32.const 1 |
630 | | /// f32.const 2 |
631 | | /// i64.const -3 |
632 | | /// i64.const 3 |
633 | | /// f64.const 4 |
634 | | /// call $debug)) |
635 | | /// "#, |
636 | | /// )?; |
637 | | /// let instance = Instance::new(&mut store, &module, &[debug.into()])?; |
638 | | /// let foo = instance.get_typed_func::<(), (), _>(&mut store, "foo")?; |
639 | | /// foo.call(&mut store, ())?; |
640 | | /// # Ok(()) |
641 | | /// # } |
642 | | /// ``` |
643 | | /// |
644 | | /// Finally if you want to get really fancy you can also implement |
645 | | /// imports that read/write wasm module's memory |
646 | | /// |
647 | | /// ``` |
648 | | /// use std::str; |
649 | | /// |
650 | | /// # use wasmtime::*; |
651 | | /// # fn main() -> anyhow::Result<()> { |
652 | | /// # let mut store = Store::default(); |
653 | | /// let log_str = Func::wrap(&mut store, |mut caller: Caller<'_, ()>, ptr: i32, len: i32| { |
654 | | /// let mem = match caller.get_export("memory") { |
655 | | /// Some(Extern::Memory(mem)) => mem, |
656 | | /// _ => return Err(Trap::new("failed to find host memory")), |
657 | | /// }; |
658 | | /// let data = mem.data(&caller) |
659 | | /// .get(ptr as u32 as usize..) |
660 | | /// .and_then(|arr| arr.get(..len as u32 as usize)); |
661 | | /// let string = match data { |
662 | | /// Some(data) => match str::from_utf8(data) { |
663 | | /// Ok(s) => s, |
664 | | /// Err(_) => return Err(Trap::new("invalid utf-8")), |
665 | | /// }, |
666 | | /// None => return Err(Trap::new("pointer/length out of bounds")), |
667 | | /// }; |
668 | | /// assert_eq!(string, "Hello, world!"); |
669 | | /// println!("{}", string); |
670 | | /// Ok(()) |
671 | | /// }); |
672 | | /// let module = Module::new( |
673 | | /// store.engine(), |
674 | | /// r#" |
675 | | /// (module |
676 | | /// (import "" "" (func $log_str (param i32 i32))) |
677 | | /// (func (export "foo") |
678 | | /// i32.const 4 ;; ptr |
679 | | /// i32.const 13 ;; len |
680 | | /// call $log_str) |
681 | | /// (memory (export "memory") 1) |
682 | | /// (data (i32.const 4) "Hello, world!")) |
683 | | /// "#, |
684 | | /// )?; |
685 | | /// let instance = Instance::new(&mut store, &module, &[log_str.into()])?; |
686 | | /// let foo = instance.get_typed_func::<(), (), _>(&mut store, "foo")?; |
687 | | /// foo.call(&mut store, ())?; |
688 | | /// # Ok(()) |
689 | | /// # } |
690 | | /// ``` |
691 | 0 | pub fn wrap<T, Params, Results>( |
692 | 0 | mut store: impl AsContextMut<Data = T>, |
693 | 0 | func: impl IntoFunc<T, Params, Results>, |
694 | 0 | ) -> Func { |
695 | 0 | let store = store.as_context_mut().0; |
696 | 0 | // part of this unsafety is about matching the `T` to a `Store<T>`, |
697 | 0 | // which is done through the `AsContextMut` bound above. |
698 | 0 | unsafe { |
699 | 0 | let host = HostFunc::wrap(store.engine(), func); |
700 | 0 | host.into_func(store) |
701 | 0 | } |
702 | 0 | } |
703 | | |
704 | | for_each_function_signature!(generate_wrap_async_func); |
705 | | |
706 | | /// Returns the underlying wasm type that this `Func` has. |
707 | | /// |
708 | | /// # Panics |
709 | | /// |
710 | | /// Panics if `store` does not own this function. |
711 | 20.4k | pub fn ty(&self, store: impl AsContext) -> FuncType { |
712 | 20.4k | self.load_ty(&store.as_context().0) |
713 | 20.4k | } <wasmtime::func::Func>::ty::<&mut wasmtime::store::Store<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>> Line | Count | Source | 711 | 18.7k | pub fn ty(&self, store: impl AsContext) -> FuncType { | 712 | 18.7k | self.load_ty(&store.as_context().0) | 713 | 18.7k | } |
Unexecuted instantiation: <wasmtime::func::Func>::ty::<_> <wasmtime::func::Func>::ty::<&mut wasmtime::store::Store<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>> Line | Count | Source | 711 | 1.72k | pub fn ty(&self, store: impl AsContext) -> FuncType { | 712 | 1.72k | self.load_ty(&store.as_context().0) | 713 | 1.72k | } |
|
714 | | |
715 | | /// Forcibly loads the type of this function from the `Engine`. |
716 | | /// |
717 | | /// Note that this is a somewhat expensive method since it requires taking a |
718 | | /// lock as well as cloning a type. |
719 | 20.4k | fn load_ty(&self, store: &StoreOpaque) -> FuncType { |
720 | 20.4k | FuncType::from_wasm_func_type( |
721 | 20.4k | store |
722 | 20.4k | .engine() |
723 | 20.4k | .signatures() |
724 | 20.4k | .lookup_type(self.sig_index(store.store_data())) |
725 | 20.4k | .expect("signature should be registered"), |
726 | 20.4k | ) |
727 | 20.4k | } |
728 | | |
729 | | /// Gets a reference to the `FuncType` for this function. |
730 | | /// |
731 | | /// Note that this returns both a reference to the type of this function as |
732 | | /// well as a reference back to the store itself. This enables using the |
733 | | /// `StoreOpaque` while the `FuncType` is also being used (from the |
734 | | /// perspective of the borrow-checker) because otherwise the signature would |
735 | | /// consider `StoreOpaque` borrowed mutable while `FuncType` is in use. |
736 | 0 | fn ty_ref<'a>(&self, store: &'a mut StoreOpaque) -> (&'a FuncType, &'a StoreOpaque) { |
737 | 0 | // If we haven't loaded our type into the store yet then do so lazily at |
738 | 0 | // this time. |
739 | 0 | if store.store_data()[self.0].ty.is_none() { |
740 | 0 | let ty = self.load_ty(store); |
741 | 0 | store.store_data_mut()[self.0].ty = Some(Box::new(ty)); |
742 | 0 | } |
743 | | |
744 | 0 | (store.store_data()[self.0].ty.as_ref().unwrap(), store) |
745 | 0 | } |
746 | | |
747 | 20.4k | pub(crate) fn sig_index(&self, data: &StoreData) -> VMSharedSignatureIndex { |
748 | 20.4k | data[self.0].sig_index() |
749 | 20.4k | } |
750 | | |
751 | | /// Invokes this function with the `params` given and writes returned values |
752 | | /// to `results`. |
753 | | /// |
754 | | /// The `params` here must match the type signature of this `Func`, or a |
755 | | /// trap will occur. If a trap occurs while executing this function, then a |
756 | | /// trap will also be returned. Additionally `results` must have the same |
757 | | /// length as the number of results for this function. |
758 | | /// |
759 | | /// # Panics |
760 | | /// |
761 | | /// This function will panic if called on a function belonging to an async |
762 | | /// store. Asynchronous stores must always use `call_async`. |
763 | | /// initiates a panic. Also panics if `store` does not own this function. |
764 | 0 | pub fn call( |
765 | 0 | &self, |
766 | 0 | mut store: impl AsContextMut, |
767 | 0 | params: &[Val], |
768 | 0 | results: &mut [Val], |
769 | 0 | ) -> Result<()> { |
770 | 0 | assert!( |
771 | 0 | !store.as_context().async_support(), |
772 | 0 | "must use `call_async` when async support is enabled on the config", |
773 | | ); |
774 | 0 | self.call_impl(&mut store.as_context_mut(), params, results) |
775 | 0 | } |
776 | | |
777 | | /// Invokes this function in an "unchecked" fashion, reading parameters and |
778 | | /// writing results to `params_and_returns`. |
779 | | /// |
780 | | /// This function is the same as [`Func::call`] except that the arguments |
781 | | /// and results both use a different representation. If possible it's |
782 | | /// recommended to use [`Func::call`] if safety isn't necessary or to use |
783 | | /// [`Func::typed`] in conjunction with [`TypedFunc::call`] since that's |
784 | | /// both safer and faster than this method of invoking a function. |
785 | | /// |
786 | | /// Note that if this function takes `externref` arguments then it will |
787 | | /// **not** automatically GC unlike the [`Func::call`] and |
788 | | /// [`TypedFunc::call`] functions. This means that if this function is |
789 | | /// invoked many times with new `ExternRef` values and no other GC happens |
790 | | /// via any other means then no values will get collected. |
791 | | /// |
792 | | /// # Unsafety |
793 | | /// |
794 | | /// This function is unsafe because the `params_and_returns` argument is not |
795 | | /// validated at all. It must uphold invariants such as: |
796 | | /// |
797 | | /// * It's a valid pointer to an array |
798 | | /// * It has enough space to store all parameters |
799 | | /// * It has enough space to store all results (not at the same time as |
800 | | /// parameters) |
801 | | /// * Parameters are initially written to the array and have the correct |
802 | | /// types and such. |
803 | | /// * Reference types like `externref` and `funcref` are valid at the |
804 | | /// time of this call and for the `store` specified. |
805 | | /// |
806 | | /// These invariants are all upheld for you with [`Func::call`] and |
807 | | /// [`TypedFunc::call`]. |
808 | 0 | pub unsafe fn call_unchecked( |
809 | 0 | &self, |
810 | 0 | mut store: impl AsContextMut, |
811 | 0 | params_and_returns: *mut ValRaw, |
812 | 0 | ) -> Result<(), Trap> { |
813 | 0 | let mut store = store.as_context_mut(); |
814 | 0 | let data = &store.0.store_data()[self.0]; |
815 | 0 | let anyfunc = data.export().anyfunc; |
816 | 0 | let trampoline = data.trampoline(); |
817 | 0 | Self::call_unchecked_raw(&mut store, anyfunc, trampoline, params_and_returns) |
818 | 0 | } |
819 | | |
820 | 0 | pub(crate) unsafe fn call_unchecked_raw<T>( |
821 | 0 | store: &mut StoreContextMut<'_, T>, |
822 | 0 | anyfunc: NonNull<VMCallerCheckedAnyfunc>, |
823 | 0 | trampoline: VMTrampoline, |
824 | 0 | params_and_returns: *mut ValRaw, |
825 | 0 | ) -> Result<(), Trap> { |
826 | 0 | invoke_wasm_and_catch_traps(store, |caller| { |
827 | 0 | let trampoline = wasmtime_runtime::prepare_host_to_wasm_trampoline(caller, trampoline); |
828 | 0 | trampoline( |
829 | 0 | anyfunc.as_ref().vmctx, |
830 | 0 | caller, |
831 | 0 | anyfunc.as_ref().func_ptr.as_ptr(), |
832 | 0 | params_and_returns, |
833 | 0 | ) |
834 | 0 | }) |
835 | 0 | } |
836 | | |
837 | | /// Converts the raw representation of a `funcref` into an `Option<Func>` |
838 | | /// |
839 | | /// This is intended to be used in conjunction with [`Func::new_unchecked`], |
840 | | /// [`Func::call_unchecked`], and [`ValRaw`] with its `funcref` field. |
841 | | /// |
842 | | /// # Unsafety |
843 | | /// |
844 | | /// This function is not safe because `raw` is not validated at all. The |
845 | | /// caller must guarantee that `raw` is owned by the `store` provided and is |
846 | | /// valid within the `store`. |
847 | 0 | pub unsafe fn from_raw(mut store: impl AsContextMut, raw: usize) -> Option<Func> { |
848 | 0 | Func::from_caller_checked_anyfunc(store.as_context_mut().0, raw as *mut _) |
849 | 0 | } Unexecuted instantiation: <wasmtime::func::Func>::from_raw::<wasmtime::store::context::StoreContextMut<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>> Unexecuted instantiation: <wasmtime::func::Func>::from_raw::<_> Unexecuted instantiation: <wasmtime::func::Func>::from_raw::<wasmtime::store::context::StoreContextMut<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>> |
850 | | |
851 | | /// Extracts the raw value of this `Func`, which is owned by `store`. |
852 | | /// |
853 | | /// This function returns a value that's suitable for writing into the |
854 | | /// `funcref` field of the [`ValRaw`] structure. |
855 | | /// |
856 | | /// # Unsafety |
857 | | /// |
858 | | /// The returned value is only valid for as long as the store is alive and |
859 | | /// this function is properly rooted within it. Additionally this function |
860 | | /// should not be liberally used since it's a very low-level knob. |
861 | 0 | pub unsafe fn to_raw(&self, store: impl AsContext) -> usize { |
862 | 0 | self.caller_checked_anyfunc(store.as_context().0).as_ptr() as usize |
863 | 0 | } |
864 | | |
865 | | /// Invokes this function with the `params` given, returning the results |
866 | | /// asynchronously. |
867 | | /// |
868 | | /// This function is the same as [`Func::call`] except that it is |
869 | | /// asynchronous. This is only compatible with stores associated with an |
870 | | /// [asynchronous config](crate::Config::async_support). |
871 | | /// |
872 | | /// It's important to note that the execution of WebAssembly will happen |
873 | | /// synchronously in the `poll` method of the future returned from this |
874 | | /// function. Wasmtime does not manage its own thread pool or similar to |
875 | | /// execute WebAssembly in. Future `poll` methods are generally expected to |
876 | | /// resolve quickly, so it's recommended that you run or poll this future |
877 | | /// in a "blocking context". |
878 | | /// |
879 | | /// For more information see the documentation on [asynchronous |
880 | | /// configs](crate::Config::async_support). |
881 | | /// |
882 | | /// # Panics |
883 | | /// |
884 | | /// Panics if this is called on a function in a synchronous store. This |
885 | | /// only works with functions defined within an asynchronous store. Also |
886 | | /// panics if `store` does not own this function. |
887 | | #[cfg(feature = "async")] |
888 | | #[cfg_attr(nightlydoc, doc(cfg(feature = "async")))] |
889 | | pub async fn call_async<T>( |
890 | | &self, |
891 | | mut store: impl AsContextMut<Data = T>, |
892 | | params: &[Val], |
893 | | results: &mut [Val], |
894 | | ) -> Result<()> |
895 | | where |
896 | | T: Send, |
897 | | { |
898 | | let mut store = store.as_context_mut(); |
899 | | assert!( |
900 | | store.0.async_support(), |
901 | | "cannot use `call_async` without enabling async support in the config", |
902 | | ); |
903 | | let result = store |
904 | | .on_fiber(|store| self.call_impl(store, params, results)) |
905 | | .await??; |
906 | | Ok(result) |
907 | | } |
908 | | |
909 | 0 | fn call_impl<T>( |
910 | 0 | &self, |
911 | 0 | store: &mut StoreContextMut<'_, T>, |
912 | 0 | params: &[Val], |
913 | 0 | results: &mut [Val], |
914 | 0 | ) -> Result<()> { |
915 | 0 | // We need to perform a dynamic check that the arguments given to us |
916 | 0 | // match the signature of this function and are appropriate to pass to |
917 | 0 | // this function. This involves checking to make sure we have the right |
918 | 0 | // number and types of arguments as well as making sure everything is |
919 | 0 | // from the same `Store`. |
920 | 0 | let (ty, opaque) = self.ty_ref(store.0); |
921 | 0 | if ty.params().len() != params.len() { |
922 | 0 | bail!( |
923 | 0 | "expected {} arguments, got {}", |
924 | 0 | ty.params().len(), |
925 | 0 | params.len() |
926 | 0 | ); |
927 | 0 | } |
928 | 0 | if ty.results().len() != results.len() { |
929 | 0 | bail!( |
930 | 0 | "expected {} results, got {}", |
931 | 0 | ty.results().len(), |
932 | 0 | results.len() |
933 | 0 | ); |
934 | 0 | } |
935 | 0 | for (ty, arg) in ty.params().zip(params) { |
936 | 0 | if arg.ty() != ty { |
937 | 0 | bail!( |
938 | 0 | "argument type mismatch: found {} but expected {}", |
939 | 0 | arg.ty(), |
940 | 0 | ty |
941 | 0 | ); |
942 | 0 | } |
943 | 0 | if !arg.comes_from_same_store(opaque) { |
944 | 0 | bail!("cross-`Store` values are not currently supported"); |
945 | 0 | } |
946 | | } |
947 | | |
948 | 0 | let values_vec_size = params.len().max(ty.results().len()); |
949 | 0 |
|
950 | 0 | // Whenever we pass `externref`s from host code to Wasm code, they |
951 | 0 | // go into the `VMExternRefActivationsTable`. But the table might be |
952 | 0 | // at capacity already, so check for that. If it is at capacity |
953 | 0 | // (unlikely) then do a GC to free up space. This is necessary |
954 | 0 | // because otherwise we would either keep filling up the bump chunk |
955 | 0 | // and making it larger and larger or we would always take the slow |
956 | 0 | // path when inserting references into the table. |
957 | 0 | if ty.as_wasm_func_type().externref_params_count() |
958 | 0 | > store |
959 | 0 | .0 |
960 | 0 | .externref_activations_table() |
961 | 0 | .bump_capacity_remaining() |
962 | 0 | { |
963 | 0 | store.gc(); |
964 | 0 | } |
965 | | |
966 | | // Store the argument values into `values_vec`. |
967 | 0 | let mut values_vec = store.0.take_wasm_val_raw_storage(); |
968 | 0 | debug_assert!(values_vec.is_empty()); |
969 | 0 | values_vec.resize_with(values_vec_size, || ValRaw::i32(0)); |
970 | 0 | for (arg, slot) in params.iter().cloned().zip(&mut values_vec) { |
971 | 0 | unsafe { |
972 | 0 | *slot = arg.to_raw(&mut *store); |
973 | 0 | } |
974 | | } |
975 | | |
976 | | unsafe { |
977 | 0 | self.call_unchecked(&mut *store, values_vec.as_mut_ptr())?; |
978 | | } |
979 | | |
980 | 0 | for ((i, slot), val) in results.iter_mut().enumerate().zip(&values_vec) { |
981 | 0 | let ty = self.ty_ref(store.0).0.results().nth(i).unwrap(); |
982 | 0 | *slot = unsafe { Val::from_raw(&mut *store, *val, ty) }; |
983 | 0 | } |
984 | 0 | values_vec.truncate(0); |
985 | 0 | store.0.save_wasm_val_raw_storage(values_vec); |
986 | 0 | Ok(()) |
987 | 0 | } |
988 | | |
989 | | #[inline] |
990 | 99.4k | pub(crate) fn caller_checked_anyfunc( |
991 | 99.4k | &self, |
992 | 99.4k | store: &StoreOpaque, |
993 | 99.4k | ) -> NonNull<VMCallerCheckedAnyfunc> { |
994 | 99.4k | store.store_data()[self.0].export().anyfunc |
995 | 99.4k | } |
996 | | |
997 | 20.4k | pub(crate) unsafe fn from_wasmtime_function( |
998 | 20.4k | export: ExportFunction, |
999 | 20.4k | store: &mut StoreOpaque, |
1000 | 20.4k | ) -> Self { |
1001 | 20.4k | let anyfunc = export.anyfunc.as_ref(); |
1002 | 20.4k | let trampoline = store.lookup_trampoline(&*anyfunc); |
1003 | 20.4k | Func::from_func_kind(FuncKind::StoreOwned { trampoline, export }, store) |
1004 | 20.4k | } |
1005 | | |
1006 | 99.4k | fn from_func_kind(kind: FuncKind, store: &mut StoreOpaque) -> Self { |
1007 | 99.4k | Func(store.store_data_mut().insert(FuncData { kind, ty: None })) |
1008 | 99.4k | } |
1009 | | |
1010 | 78.9k | pub(crate) fn vmimport(&self, store: &mut StoreOpaque) -> VMFunctionImport { |
1011 | 78.9k | unsafe { |
1012 | 78.9k | let f = self.caller_checked_anyfunc(store); |
1013 | 78.9k | VMFunctionImport { |
1014 | 78.9k | body: f.as_ref().func_ptr, |
1015 | 78.9k | vmctx: f.as_ref().vmctx, |
1016 | 78.9k | } |
1017 | 78.9k | } |
1018 | 78.9k | } |
1019 | | |
1020 | 0 | pub(crate) fn comes_from_same_store(&self, store: &StoreOpaque) -> bool { |
1021 | 0 | store.store_data().contains(self.0) |
1022 | 0 | } |
1023 | | |
1024 | 0 | fn invoke<T>( |
1025 | 0 | mut caller: Caller<'_, T>, |
1026 | 0 | ty: &FuncType, |
1027 | 0 | values_vec: &mut [ValRaw], |
1028 | 0 | func: &dyn Fn(Caller<'_, T>, &[Val], &mut [Val]) -> Result<(), Trap>, |
1029 | 0 | ) -> Result<(), Trap> { |
1030 | 0 | // Translate the raw JIT arguments in `values_vec` into a `Val` which |
1031 | 0 | // we'll be passing as a slice. The storage for our slice-of-`Val` we'll |
1032 | 0 | // be taking from the `Store`. We preserve our slice back into the |
1033 | 0 | // `Store` after the hostcall, ideally amortizing the cost of allocating |
1034 | 0 | // the storage across wasm->host calls. |
1035 | 0 | // |
1036 | 0 | // Note that we have a dynamic guarantee that `values_vec` is the |
1037 | 0 | // appropriate length to both read all arguments from as well as store |
1038 | 0 | // all results into. |
1039 | 0 | let mut val_vec = caller.store.0.take_hostcall_val_storage(); |
1040 | 0 | debug_assert!(val_vec.is_empty()); |
1041 | 0 | let nparams = ty.params().len(); |
1042 | 0 | val_vec.reserve(nparams + ty.results().len()); |
1043 | 0 | for (i, ty) in ty.params().enumerate() { |
1044 | 0 | val_vec.push(unsafe { Val::from_raw(&mut caller.store, values_vec[i], ty) }) |
1045 | | } |
1046 | | |
1047 | 0 | val_vec.extend((0..ty.results().len()).map(|_| Val::null())); |
1048 | 0 | let (params, results) = val_vec.split_at_mut(nparams); |
1049 | 0 | func(caller.sub_caller(), params, results)?; |
1050 | | |
1051 | | // See the comment in `Func::call_impl`'s `write_params` function. |
1052 | 0 | if ty.as_wasm_func_type().externref_returns_count() |
1053 | 0 | > caller |
1054 | 0 | .store |
1055 | 0 | .0 |
1056 | 0 | .externref_activations_table() |
1057 | 0 | .bump_capacity_remaining() |
1058 | 0 | { |
1059 | 0 | caller.store.gc(); |
1060 | 0 | } |
1061 | | |
1062 | | // Unlike our arguments we need to dynamically check that the return |
1063 | | // values produced are correct. There could be a bug in `func` that |
1064 | | // produces the wrong number, wrong types, or wrong stores of |
1065 | | // values, and we need to catch that here. |
1066 | 0 | for (i, (ret, ty)) in results.iter().zip(ty.results()).enumerate() { |
1067 | 0 | if ret.ty() != ty { |
1068 | 0 | return Err(Trap::new( |
1069 | 0 | "function attempted to return an incompatible value", |
1070 | 0 | )); |
1071 | 0 | } |
1072 | 0 | if !ret.comes_from_same_store(caller.store.0) { |
1073 | 0 | return Err(Trap::new( |
1074 | 0 | "cross-`Store` values are not currently supported", |
1075 | 0 | )); |
1076 | 0 | } |
1077 | 0 | unsafe { |
1078 | 0 | values_vec[i] = ret.to_raw(&mut caller.store); |
1079 | 0 | } |
1080 | | } |
1081 | | |
1082 | | // Restore our `val_vec` back into the store so it's usable for the next |
1083 | | // hostcall to reuse our own storage. |
1084 | 0 | val_vec.truncate(0); |
1085 | 0 | caller.store.0.save_hostcall_val_storage(val_vec); |
1086 | 0 | Ok(()) |
1087 | 0 | } |
1088 | | |
1089 | | /// Attempts to extract a typed object from this `Func` through which the |
1090 | | /// function can be called. |
1091 | | /// |
1092 | | /// This function serves as an alternative to [`Func::call`] and |
1093 | | /// [`Func::call_async`]. This method performs a static type check (using |
1094 | | /// the `Params` and `Results` type parameters on the underlying wasm |
1095 | | /// function. If the type check passes then a `TypedFunc` object is returned, |
1096 | | /// otherwise an error is returned describing the typecheck failure. |
1097 | | /// |
1098 | | /// The purpose of this relative to [`Func::call`] is that it's much more |
1099 | | /// efficient when used to invoke WebAssembly functions. With the types |
1100 | | /// statically known far less setup/teardown is required when invoking |
1101 | | /// WebAssembly. If speed is desired then this function is recommended to be |
1102 | | /// used instead of [`Func::call`] (which is more general, hence its |
1103 | | /// slowdown). |
1104 | | /// |
1105 | | /// The `Params` type parameter is used to describe the parameters of the |
1106 | | /// WebAssembly function. This can either be a single type (like `i32`), or |
1107 | | /// a tuple of types representing the list of parameters (like `(i32, f32, |
1108 | | /// f64)`). Additionally you can use `()` to represent that the function has |
1109 | | /// no parameters. |
1110 | | /// |
1111 | | /// The `Results` type parameter is used to describe the results of the |
1112 | | /// function. This behaves the same way as `Params`, but just for the |
1113 | | /// results of the function. |
1114 | | /// |
1115 | | /// The `S` type parameter represents the method of passing in the store |
1116 | | /// context, and can typically be specified as simply `_` when calling this |
1117 | | /// function. |
1118 | | /// |
1119 | | /// Translation between Rust types and WebAssembly types looks like: |
1120 | | /// |
1121 | | /// | WebAssembly | Rust | |
1122 | | /// |-------------|---------------------| |
1123 | | /// | `i32` | `i32` or `u32` | |
1124 | | /// | `i64` | `i64` or `u64` | |
1125 | | /// | `f32` | `f32` | |
1126 | | /// | `f64` | `f64` | |
1127 | | /// | `externref` | `Option<ExternRef>` | |
1128 | | /// | `funcref` | `Option<Func>` | |
1129 | | /// | `v128` | not supported | |
1130 | | /// |
1131 | | /// (note that this mapping is the same as that of [`Func::wrap`]). |
1132 | | /// |
1133 | | /// Note that once the [`TypedFunc`] return value is acquired you'll use either |
1134 | | /// [`TypedFunc::call`] or [`TypedFunc::call_async`] as necessary to actually invoke |
1135 | | /// the function. This method does not invoke any WebAssembly code, it |
1136 | | /// simply performs a typecheck before returning the [`TypedFunc`] value. |
1137 | | /// |
1138 | | /// This method also has a convenience wrapper as |
1139 | | /// [`Instance::get_typed_func`](crate::Instance::get_typed_func) to |
1140 | | /// directly get a typed function value from an |
1141 | | /// [`Instance`](crate::Instance). |
1142 | | /// |
1143 | | /// # Errors |
1144 | | /// |
1145 | | /// This function will return an error if `Params` or `Results` does not |
1146 | | /// match the native type of this WebAssembly function. |
1147 | | /// |
1148 | | /// # Panics |
1149 | | /// |
1150 | | /// This method will panic if `store` does not own this function. |
1151 | | /// |
1152 | | /// # Examples |
1153 | | /// |
1154 | | /// An end-to-end example of calling a function which takes no parameters |
1155 | | /// and has no results: |
1156 | | /// |
1157 | | /// ``` |
1158 | | /// # use wasmtime::*; |
1159 | | /// # fn main() -> anyhow::Result<()> { |
1160 | | /// let engine = Engine::default(); |
1161 | | /// let mut store = Store::new(&engine, ()); |
1162 | | /// let module = Module::new(&engine, r#"(module (func (export "foo")))"#)?; |
1163 | | /// let instance = Instance::new(&mut store, &module, &[])?; |
1164 | | /// let foo = instance.get_func(&mut store, "foo").expect("export wasn't a function"); |
1165 | | /// |
1166 | | /// // Note that this call can fail due to the typecheck not passing, but |
1167 | | /// // in our case we statically know the module so we know this should |
1168 | | /// // pass. |
1169 | | /// let typed = foo.typed::<(), (), _>(&store)?; |
1170 | | /// |
1171 | | /// // Note that this can fail if the wasm traps at runtime. |
1172 | | /// typed.call(&mut store, ())?; |
1173 | | /// # Ok(()) |
1174 | | /// # } |
1175 | | /// ``` |
1176 | | /// |
1177 | | /// You can also pass in multiple parameters and get a result back |
1178 | | /// |
1179 | | /// ``` |
1180 | | /// # use wasmtime::*; |
1181 | | /// # fn foo(add: &Func, mut store: Store<()>) -> anyhow::Result<()> { |
1182 | | /// let typed = add.typed::<(i32, i64), f32, _>(&store)?; |
1183 | | /// assert_eq!(typed.call(&mut store, (1, 2))?, 3.0); |
1184 | | /// # Ok(()) |
1185 | | /// # } |
1186 | | /// ``` |
1187 | | /// |
1188 | | /// and similarly if a function has multiple results you can bind that too |
1189 | | /// |
1190 | | /// ``` |
1191 | | /// # use wasmtime::*; |
1192 | | /// # fn foo(add_with_overflow: &Func, mut store: Store<()>) -> anyhow::Result<()> { |
1193 | | /// let typed = add_with_overflow.typed::<(u32, u32), (u32, i32), _>(&store)?; |
1194 | | /// let (result, overflow) = typed.call(&mut store, (u32::max_value(), 2))?; |
1195 | | /// assert_eq!(result, 1); |
1196 | | /// assert_eq!(overflow, 1); |
1197 | | /// # Ok(()) |
1198 | | /// # } |
1199 | | /// ``` |
1200 | 20.4k | pub fn typed<Params, Results, S>(&self, store: S) -> Result<TypedFunc<Params, Results>> |
1201 | 20.4k | where |
1202 | 20.4k | Params: WasmParams, |
1203 | 20.4k | Results: WasmResults, |
1204 | 20.4k | S: AsContext, |
1205 | 20.4k | { |
1206 | 20.4k | // Type-check that the params/results are all valid |
1207 | 20.4k | let ty = self.ty(store); |
1208 | 20.4k | Params::typecheck(ty.params()).context("type mismatch with parameters")?; |
1209 | 20.4k | Results::typecheck(ty.results()).context("type mismatch with results")?; |
1210 | | |
1211 | | // and then we can construct the typed version of this function |
1212 | | // (unsafely), which should be safe since we just did the type check above. |
1213 | 20.4k | unsafe { Ok(TypedFunc::new_unchecked(*self)) } |
1214 | 20.4k | } <wasmtime::func::Func>::typed::<(u32,), u32, &mut wasmtime::store::Store<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>> Line | Count | Source | 1200 | 18.7k | pub fn typed<Params, Results, S>(&self, store: S) -> Result<TypedFunc<Params, Results>> | 1201 | 18.7k | where | 1202 | 18.7k | Params: WasmParams, | 1203 | 18.7k | Results: WasmResults, | 1204 | 18.7k | S: AsContext, | 1205 | 18.7k | { | 1206 | 18.7k | // Type-check that the params/results are all valid | 1207 | 18.7k | let ty = self.ty(store); | 1208 | 18.7k | Params::typecheck(ty.params()).context("type mismatch with parameters")?; | 1209 | 18.7k | Results::typecheck(ty.results()).context("type mismatch with results")?; | 1210 | | | 1211 | | // and then we can construct the typed version of this function | 1212 | | // (unsafely), which should be safe since we just did the type check above. | 1213 | 18.7k | unsafe { Ok(TypedFunc::new_unchecked(*self)) } | 1214 | 18.7k | } |
Unexecuted instantiation: <wasmtime::func::Func>::typed::<_, _, _> <wasmtime::func::Func>::typed::<(u32,), u32, &mut wasmtime::store::Store<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>> Line | Count | Source | 1200 | 1.72k | pub fn typed<Params, Results, S>(&self, store: S) -> Result<TypedFunc<Params, Results>> | 1201 | 1.72k | where | 1202 | 1.72k | Params: WasmParams, | 1203 | 1.72k | Results: WasmResults, | 1204 | 1.72k | S: AsContext, | 1205 | 1.72k | { | 1206 | 1.72k | // Type-check that the params/results are all valid | 1207 | 1.72k | let ty = self.ty(store); | 1208 | 1.72k | Params::typecheck(ty.params()).context("type mismatch with parameters")?; | 1209 | 1.72k | Results::typecheck(ty.results()).context("type mismatch with results")?; | 1210 | | | 1211 | | // and then we can construct the typed version of this function | 1212 | | // (unsafely), which should be safe since we just did the type check above. | 1213 | 1.72k | unsafe { Ok(TypedFunc::new_unchecked(*self)) } | 1214 | 1.72k | } |
|
1215 | | } |
1216 | | |
1217 | | /// Prepares for entrance into WebAssembly. |
1218 | | /// |
1219 | | /// This function will set up context such that `closure` is allowed to call a |
1220 | | /// raw trampoline or a raw WebAssembly function. This *must* be called to do |
1221 | | /// things like catch traps and set up GC properly. |
1222 | | /// |
1223 | | /// The `closure` provided receives a default "caller" `VMContext` parameter it |
1224 | | /// can pass to the called wasm function, if desired. |
1225 | 20.5k | pub(crate) fn invoke_wasm_and_catch_traps<T>( |
1226 | 20.5k | store: &mut StoreContextMut<'_, T>, |
1227 | 20.5k | closure: impl FnMut(*mut VMContext), |
1228 | 20.5k | ) -> Result<(), Trap> { |
1229 | 20.5k | unsafe { |
1230 | 20.5k | let exit = enter_wasm(store); |
1231 | | |
1232 | 20.5k | if let Err(trap) = store.0.call_hook(CallHook::CallingWasm) { |
1233 | 0 | exit_wasm(store, exit); |
1234 | 0 | return Err(trap); |
1235 | 20.5k | } |
1236 | 20.5k | let result = wasmtime_runtime::catch_traps( |
1237 | 20.5k | store.0.signal_handler(), |
1238 | 20.5k | store.0.engine().config().wasm_backtrace, |
1239 | 20.5k | store.0.default_caller(), |
1240 | 20.5k | closure, |
1241 | 20.5k | ); |
1242 | 20.5k | exit_wasm(store, exit); |
1243 | 20.5k | store.0.call_hook(CallHook::ReturningFromWasm)?; |
1244 | 20.5k | result.map_err(|t| Trap::from_runtime_box(store.0, t)) wasmtime::func::invoke_wasm_and_catch_traps::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::func::typed::TypedFunc<(u32,), u32>>::call_raw<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>::{closure#0}>::{closure#0}Line | Count | Source | 1244 | 1.82k | result.map_err(|t| Trap::from_runtime_box(store.0, t)) |
wasmtime::func::invoke_wasm_and_catch_traps::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::instance::Instance>::start_raw<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>::{closure#0}>::{closure#0}Line | Count | Source | 1244 | 98 | result.map_err(|t| Trap::from_runtime_box(store.0, t)) |
Unexecuted instantiation: wasmtime::func::invoke_wasm_and_catch_traps::<_, _>::{closure#0}wasmtime::func::invoke_wasm_and_catch_traps::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::func::typed::TypedFunc<(u32,), u32>>::call_raw<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>::{closure#0}>::{closure#0}Line | Count | Source | 1244 | 1.68k | result.map_err(|t| Trap::from_runtime_box(store.0, t)) |
Unexecuted instantiation: wasmtime::func::invoke_wasm_and_catch_traps::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::instance::Instance>::start_raw<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>::{closure#0}>::{closure#0} |
1245 | | } |
1246 | 20.5k | } wasmtime::func::invoke_wasm_and_catch_traps::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::instance::Instance>::start_raw<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>::{closure#0}>Line | Count | Source | 1225 | 98 | pub(crate) fn invoke_wasm_and_catch_traps<T>( | 1226 | 98 | store: &mut StoreContextMut<'_, T>, | 1227 | 98 | closure: impl FnMut(*mut VMContext), | 1228 | 98 | ) -> Result<(), Trap> { | 1229 | 98 | unsafe { | 1230 | 98 | let exit = enter_wasm(store); | 1231 | | | 1232 | 98 | if let Err(trap) = store.0.call_hook(CallHook::CallingWasm) { | 1233 | 0 | exit_wasm(store, exit); | 1234 | 0 | return Err(trap); | 1235 | 98 | } | 1236 | 98 | let result = wasmtime_runtime::catch_traps( | 1237 | 98 | store.0.signal_handler(), | 1238 | 98 | store.0.engine().config().wasm_backtrace, | 1239 | 98 | store.0.default_caller(), | 1240 | 98 | closure, | 1241 | 98 | ); | 1242 | 98 | exit_wasm(store, exit); | 1243 | 98 | store.0.call_hook(CallHook::ReturningFromWasm)?; | 1244 | 98 | result.map_err(|t| Trap::from_runtime_box(store.0, t)) | 1245 | | } | 1246 | 98 | } |
wasmtime::func::invoke_wasm_and_catch_traps::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::func::typed::TypedFunc<(u32,), u32>>::call_raw<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>::{closure#0}>Line | Count | Source | 1225 | 18.7k | pub(crate) fn invoke_wasm_and_catch_traps<T>( | 1226 | 18.7k | store: &mut StoreContextMut<'_, T>, | 1227 | 18.7k | closure: impl FnMut(*mut VMContext), | 1228 | 18.7k | ) -> Result<(), Trap> { | 1229 | 18.7k | unsafe { | 1230 | 18.7k | let exit = enter_wasm(store); | 1231 | | | 1232 | 18.7k | if let Err(trap) = store.0.call_hook(CallHook::CallingWasm) { | 1233 | 0 | exit_wasm(store, exit); | 1234 | 0 | return Err(trap); | 1235 | 18.7k | } | 1236 | 18.7k | let result = wasmtime_runtime::catch_traps( | 1237 | 18.7k | store.0.signal_handler(), | 1238 | 18.7k | store.0.engine().config().wasm_backtrace, | 1239 | 18.7k | store.0.default_caller(), | 1240 | 18.7k | closure, | 1241 | 18.7k | ); | 1242 | 18.7k | exit_wasm(store, exit); | 1243 | 18.7k | store.0.call_hook(CallHook::ReturningFromWasm)?; | 1244 | 18.7k | result.map_err(|t| Trap::from_runtime_box(store.0, t)) | 1245 | | } | 1246 | 18.7k | } |
Unexecuted instantiation: wasmtime::func::invoke_wasm_and_catch_traps::<_, _> Unexecuted instantiation: wasmtime::func::invoke_wasm_and_catch_traps::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::instance::Instance>::start_raw<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>::{closure#0}>wasmtime::func::invoke_wasm_and_catch_traps::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::func::typed::TypedFunc<(u32,), u32>>::call_raw<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>::{closure#0}>Line | Count | Source | 1225 | 1.72k | pub(crate) fn invoke_wasm_and_catch_traps<T>( | 1226 | 1.72k | store: &mut StoreContextMut<'_, T>, | 1227 | 1.72k | closure: impl FnMut(*mut VMContext), | 1228 | 1.72k | ) -> Result<(), Trap> { | 1229 | 1.72k | unsafe { | 1230 | 1.72k | let exit = enter_wasm(store); | 1231 | | | 1232 | 1.72k | if let Err(trap) = store.0.call_hook(CallHook::CallingWasm) { | 1233 | 0 | exit_wasm(store, exit); | 1234 | 0 | return Err(trap); | 1235 | 1.72k | } | 1236 | 1.72k | let result = wasmtime_runtime::catch_traps( | 1237 | 1.72k | store.0.signal_handler(), | 1238 | 1.72k | store.0.engine().config().wasm_backtrace, | 1239 | 1.72k | store.0.default_caller(), | 1240 | 1.72k | closure, | 1241 | 1.72k | ); | 1242 | 1.72k | exit_wasm(store, exit); | 1243 | 1.72k | store.0.call_hook(CallHook::ReturningFromWasm)?; | 1244 | 1.72k | result.map_err(|t| Trap::from_runtime_box(store.0, t)) | 1245 | | } | 1246 | 1.72k | } |
|
1247 | | |
1248 | | /// This function is called to register state within `Store` whenever |
1249 | | /// WebAssembly is entered within the `Store`. |
1250 | | /// |
1251 | | /// This function sets up various limits such as: |
1252 | | /// |
1253 | | /// * The stack limit. This is what ensures that we limit the stack space |
1254 | | /// allocated by WebAssembly code and it's relative to the initial stack |
1255 | | /// pointer that called into wasm. |
1256 | | /// |
1257 | | /// This function may fail if the the stack limit can't be set because an |
1258 | | /// interrupt already happened. |
1259 | 20.5k | fn enter_wasm<T>(store: &mut StoreContextMut<'_, T>) -> Option<usize> { |
1260 | 20.5k | // If this is a recursive call, e.g. our stack limit is already set, then |
1261 | 20.5k | // we may be able to skip this function. |
1262 | 20.5k | // |
1263 | 20.5k | // For synchronous stores there's nothing else to do because all wasm calls |
1264 | 20.5k | // happen synchronously and on the same stack. This means that the previous |
1265 | 20.5k | // stack limit will suffice for the next recursive call. |
1266 | 20.5k | // |
1267 | 20.5k | // For asynchronous stores then each call happens on a separate native |
1268 | 20.5k | // stack. This means that the previous stack limit is no longer relevant |
1269 | 20.5k | // because we're on a separate stack. |
1270 | 20.5k | if unsafe { *store.0.runtime_limits().stack_limit.get() } != usize::MAX |
1271 | 0 | && !store.0.async_support() |
1272 | | { |
1273 | 0 | return None; |
1274 | 20.5k | } |
1275 | 20.5k | |
1276 | 20.5k | let stack_pointer = psm::stack_pointer() as usize; |
1277 | 20.5k | |
1278 | 20.5k | // Determine the stack pointer where, after which, any wasm code will |
1279 | 20.5k | // immediately trap. This is checked on the entry to all wasm functions. |
1280 | 20.5k | // |
1281 | 20.5k | // Note that this isn't 100% precise. We are requested to give wasm |
1282 | 20.5k | // `max_wasm_stack` bytes, but what we're actually doing is giving wasm |
1283 | 20.5k | // probably a little less than `max_wasm_stack` because we're |
1284 | 20.5k | // calculating the limit relative to this function's approximate stack |
1285 | 20.5k | // pointer. Wasm will be executed on a frame beneath this one (or next |
1286 | 20.5k | // to it). In any case it's expected to be at most a few hundred bytes |
1287 | 20.5k | // of slop one way or another. When wasm is typically given a MB or so |
1288 | 20.5k | // (a million bytes) the slop shouldn't matter too much. |
1289 | 20.5k | // |
1290 | 20.5k | // After we've got the stack limit then we store it into the `stack_limit` |
1291 | 20.5k | // variable. |
1292 | 20.5k | let wasm_stack_limit = stack_pointer - store.engine().config().max_wasm_stack; |
1293 | 20.5k | let prev_stack = unsafe { |
1294 | 20.5k | mem::replace( |
1295 | 20.5k | &mut *store.0.runtime_limits().stack_limit.get(), |
1296 | 20.5k | wasm_stack_limit, |
1297 | 20.5k | ) |
1298 | 20.5k | }; |
1299 | 20.5k | |
1300 | 20.5k | Some(prev_stack) |
1301 | 20.5k | } wasmtime::func::enter_wasm::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> Line | Count | Source | 1259 | 18.8k | fn enter_wasm<T>(store: &mut StoreContextMut<'_, T>) -> Option<usize> { | 1260 | 18.8k | // If this is a recursive call, e.g. our stack limit is already set, then | 1261 | 18.8k | // we may be able to skip this function. | 1262 | 18.8k | // | 1263 | 18.8k | // For synchronous stores there's nothing else to do because all wasm calls | 1264 | 18.8k | // happen synchronously and on the same stack. This means that the previous | 1265 | 18.8k | // stack limit will suffice for the next recursive call. | 1266 | 18.8k | // | 1267 | 18.8k | // For asynchronous stores then each call happens on a separate native | 1268 | 18.8k | // stack. This means that the previous stack limit is no longer relevant | 1269 | 18.8k | // because we're on a separate stack. | 1270 | 18.8k | if unsafe { *store.0.runtime_limits().stack_limit.get() } != usize::MAX | 1271 | 0 | && !store.0.async_support() | 1272 | | { | 1273 | 0 | return None; | 1274 | 18.8k | } | 1275 | 18.8k | | 1276 | 18.8k | let stack_pointer = psm::stack_pointer() as usize; | 1277 | 18.8k | | 1278 | 18.8k | // Determine the stack pointer where, after which, any wasm code will | 1279 | 18.8k | // immediately trap. This is checked on the entry to all wasm functions. | 1280 | 18.8k | // | 1281 | 18.8k | // Note that this isn't 100% precise. We are requested to give wasm | 1282 | 18.8k | // `max_wasm_stack` bytes, but what we're actually doing is giving wasm | 1283 | 18.8k | // probably a little less than `max_wasm_stack` because we're | 1284 | 18.8k | // calculating the limit relative to this function's approximate stack | 1285 | 18.8k | // pointer. Wasm will be executed on a frame beneath this one (or next | 1286 | 18.8k | // to it). In any case it's expected to be at most a few hundred bytes | 1287 | 18.8k | // of slop one way or another. When wasm is typically given a MB or so | 1288 | 18.8k | // (a million bytes) the slop shouldn't matter too much. | 1289 | 18.8k | // | 1290 | 18.8k | // After we've got the stack limit then we store it into the `stack_limit` | 1291 | 18.8k | // variable. | 1292 | 18.8k | let wasm_stack_limit = stack_pointer - store.engine().config().max_wasm_stack; | 1293 | 18.8k | let prev_stack = unsafe { | 1294 | 18.8k | mem::replace( | 1295 | 18.8k | &mut *store.0.runtime_limits().stack_limit.get(), | 1296 | 18.8k | wasm_stack_limit, | 1297 | 18.8k | ) | 1298 | 18.8k | }; | 1299 | 18.8k | | 1300 | 18.8k | Some(prev_stack) | 1301 | 18.8k | } |
Unexecuted instantiation: wasmtime::func::enter_wasm::<_> wasmtime::func::enter_wasm::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> Line | Count | Source | 1259 | 1.72k | fn enter_wasm<T>(store: &mut StoreContextMut<'_, T>) -> Option<usize> { | 1260 | 1.72k | // If this is a recursive call, e.g. our stack limit is already set, then | 1261 | 1.72k | // we may be able to skip this function. | 1262 | 1.72k | // | 1263 | 1.72k | // For synchronous stores there's nothing else to do because all wasm calls | 1264 | 1.72k | // happen synchronously and on the same stack. This means that the previous | 1265 | 1.72k | // stack limit will suffice for the next recursive call. | 1266 | 1.72k | // | 1267 | 1.72k | // For asynchronous stores then each call happens on a separate native | 1268 | 1.72k | // stack. This means that the previous stack limit is no longer relevant | 1269 | 1.72k | // because we're on a separate stack. | 1270 | 1.72k | if unsafe { *store.0.runtime_limits().stack_limit.get() } != usize::MAX | 1271 | 0 | && !store.0.async_support() | 1272 | | { | 1273 | 0 | return None; | 1274 | 1.72k | } | 1275 | 1.72k | | 1276 | 1.72k | let stack_pointer = psm::stack_pointer() as usize; | 1277 | 1.72k | | 1278 | 1.72k | // Determine the stack pointer where, after which, any wasm code will | 1279 | 1.72k | // immediately trap. This is checked on the entry to all wasm functions. | 1280 | 1.72k | // | 1281 | 1.72k | // Note that this isn't 100% precise. We are requested to give wasm | 1282 | 1.72k | // `max_wasm_stack` bytes, but what we're actually doing is giving wasm | 1283 | 1.72k | // probably a little less than `max_wasm_stack` because we're | 1284 | 1.72k | // calculating the limit relative to this function's approximate stack | 1285 | 1.72k | // pointer. Wasm will be executed on a frame beneath this one (or next | 1286 | 1.72k | // to it). In any case it's expected to be at most a few hundred bytes | 1287 | 1.72k | // of slop one way or another. When wasm is typically given a MB or so | 1288 | 1.72k | // (a million bytes) the slop shouldn't matter too much. | 1289 | 1.72k | // | 1290 | 1.72k | // After we've got the stack limit then we store it into the `stack_limit` | 1291 | 1.72k | // variable. | 1292 | 1.72k | let wasm_stack_limit = stack_pointer - store.engine().config().max_wasm_stack; | 1293 | 1.72k | let prev_stack = unsafe { | 1294 | 1.72k | mem::replace( | 1295 | 1.72k | &mut *store.0.runtime_limits().stack_limit.get(), | 1296 | 1.72k | wasm_stack_limit, | 1297 | 1.72k | ) | 1298 | 1.72k | }; | 1299 | 1.72k | | 1300 | 1.72k | Some(prev_stack) | 1301 | 1.72k | } |
|
1302 | | |
1303 | 20.5k | fn exit_wasm<T>(store: &mut StoreContextMut<'_, T>, prev_stack: Option<usize>) { |
1304 | | // If we don't have a previous stack pointer to restore, then there's no |
1305 | | // cleanup we need to perform here. |
1306 | 20.5k | let prev_stack = match prev_stack { |
1307 | 20.5k | Some(stack) => stack, |
1308 | 0 | None => return, |
1309 | | }; |
1310 | | |
1311 | 20.5k | unsafe { |
1312 | 20.5k | *store.0.runtime_limits().stack_limit.get() = prev_stack; |
1313 | 20.5k | } |
1314 | 20.5k | } wasmtime::func::exit_wasm::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> Line | Count | Source | 1303 | 18.8k | fn exit_wasm<T>(store: &mut StoreContextMut<'_, T>, prev_stack: Option<usize>) { | 1304 | | // If we don't have a previous stack pointer to restore, then there's no | 1305 | | // cleanup we need to perform here. | 1306 | 18.8k | let prev_stack = match prev_stack { | 1307 | 18.8k | Some(stack) => stack, | 1308 | 0 | None => return, | 1309 | | }; | 1310 | | | 1311 | 18.8k | unsafe { | 1312 | 18.8k | *store.0.runtime_limits().stack_limit.get() = prev_stack; | 1313 | 18.8k | } | 1314 | 18.8k | } |
Unexecuted instantiation: wasmtime::func::exit_wasm::<_> wasmtime::func::exit_wasm::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> Line | Count | Source | 1303 | 1.72k | fn exit_wasm<T>(store: &mut StoreContextMut<'_, T>, prev_stack: Option<usize>) { | 1304 | | // If we don't have a previous stack pointer to restore, then there's no | 1305 | | // cleanup we need to perform here. | 1306 | 1.72k | let prev_stack = match prev_stack { | 1307 | 1.72k | Some(stack) => stack, | 1308 | 0 | None => return, | 1309 | | }; | 1310 | | | 1311 | 1.72k | unsafe { | 1312 | 1.72k | *store.0.runtime_limits().stack_limit.get() = prev_stack; | 1313 | 1.72k | } | 1314 | 1.72k | } |
|
1315 | | |
1316 | | /// A trait implemented for types which can be returned from closures passed to |
1317 | | /// [`Func::wrap`] and friends. |
1318 | | /// |
1319 | | /// This trait should not be implemented by user types. This trait may change at |
1320 | | /// any time internally. The types which implement this trait, however, are |
1321 | | /// stable over time. |
1322 | | /// |
1323 | | /// For more information see [`Func::wrap`] |
1324 | | pub unsafe trait WasmRet { |
1325 | | // Same as `WasmTy::Abi`. |
1326 | | #[doc(hidden)] |
1327 | | type Abi: Copy; |
1328 | | #[doc(hidden)] |
1329 | | type Retptr: Copy; |
1330 | | |
1331 | | // Same as `WasmTy::compatible_with_store`. |
1332 | | #[doc(hidden)] |
1333 | | fn compatible_with_store(&self, store: &StoreOpaque) -> bool; |
1334 | | |
1335 | | // Similar to `WasmTy::into_abi_for_arg` but used when host code is |
1336 | | // returning a value into Wasm, rather than host code passing an argument to |
1337 | | // a Wasm call. Unlike `into_abi_for_arg`, implementors of this method can |
1338 | | // raise traps, which means that callers must ensure that |
1339 | | // `invoke_wasm_and_catch_traps` is on the stack, and therefore this method |
1340 | | // is unsafe. |
1341 | | #[doc(hidden)] |
1342 | | unsafe fn into_abi_for_ret( |
1343 | | self, |
1344 | | store: &mut StoreOpaque, |
1345 | | ptr: Self::Retptr, |
1346 | | ) -> Result<Self::Abi, Trap>; |
1347 | | |
1348 | | #[doc(hidden)] |
1349 | | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType; |
1350 | | |
1351 | | #[doc(hidden)] |
1352 | | unsafe fn wrap_trampoline(ptr: *mut ValRaw, f: impl FnOnce(Self::Retptr) -> Self::Abi); |
1353 | | |
1354 | | // Utilities used to convert an instance of this type to a `Result` |
1355 | | // explicitly, used when wrapping async functions which always bottom-out |
1356 | | // in a function that returns a trap because futures can be cancelled. |
1357 | | #[doc(hidden)] |
1358 | | type Fallible: WasmRet<Abi = Self::Abi, Retptr = Self::Retptr>; |
1359 | | #[doc(hidden)] |
1360 | | fn into_fallible(self) -> Self::Fallible; |
1361 | | #[doc(hidden)] |
1362 | | fn fallible_from_trap(trap: Trap) -> Self::Fallible; |
1363 | | } |
1364 | | |
1365 | | unsafe impl<T> WasmRet for T |
1366 | | where |
1367 | | T: WasmTy, |
1368 | | { |
1369 | | type Abi = <T as WasmTy>::Abi; |
1370 | | type Retptr = (); |
1371 | | type Fallible = Result<T, Trap>; |
1372 | | |
1373 | 498 | fn compatible_with_store(&self, store: &StoreOpaque) -> bool { |
1374 | 498 | <Self as WasmTy>::compatible_with_store(self, store) |
1375 | 498 | } Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::compatible_with_store Unexecuted instantiation: <_ as wasmtime::func::WasmRet>::compatible_with_store <u32 as wasmtime::func::WasmRet>::compatible_with_store Line | Count | Source | 1373 | 498 | fn compatible_with_store(&self, store: &StoreOpaque) -> bool { | 1374 | 498 | <Self as WasmTy>::compatible_with_store(self, store) | 1375 | 498 | } |
|
1376 | | |
1377 | 498 | unsafe fn into_abi_for_ret( |
1378 | 498 | self, |
1379 | 498 | store: &mut StoreOpaque, |
1380 | 498 | _retptr: (), |
1381 | 498 | ) -> Result<Self::Abi, Trap> { |
1382 | 498 | Ok(<Self as WasmTy>::into_abi(self, store)) |
1383 | 498 | } Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::into_abi_for_ret Unexecuted instantiation: <_ as wasmtime::func::WasmRet>::into_abi_for_ret <u32 as wasmtime::func::WasmRet>::into_abi_for_ret Line | Count | Source | 1377 | 498 | unsafe fn into_abi_for_ret( | 1378 | 498 | self, | 1379 | 498 | store: &mut StoreOpaque, | 1380 | 498 | _retptr: (), | 1381 | 498 | ) -> Result<Self::Abi, Trap> { | 1382 | 498 | Ok(<Self as WasmTy>::into_abi(self, store)) | 1383 | 498 | } |
|
1384 | | |
1385 | 1.45M | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { |
1386 | 1.45M | FuncType::new(params, Some(<Self as WasmTy>::valtype())) |
1387 | 1.45M | } <u32 as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1385 | 70.6k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1386 | 70.6k | FuncType::new(params, Some(<Self as WasmTy>::valtype())) | 1387 | 70.6k | } |
<u32 as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1385 | 164k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1386 | 164k | FuncType::new(params, Some(<Self as WasmTy>::valtype())) | 1387 | 164k | } |
Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::func_type::<core::option::IntoIter<wasmtime::types::ValType>> <u32 as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1385 | 235k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1386 | 235k | FuncType::new(params, Some(<Self as WasmTy>::valtype())) | 1387 | 235k | } |
<u32 as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1385 | 23.5k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1386 | 23.5k | FuncType::new(params, Some(<Self as WasmTy>::valtype())) | 1387 | 23.5k | } |
<u32 as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1385 | 23.5k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1386 | 23.5k | FuncType::new(params, Some(<Self as WasmTy>::valtype())) | 1387 | 23.5k | } |
<u32 as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1385 | 188k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1386 | 188k | FuncType::new(params, Some(<Self as WasmTy>::valtype())) | 1387 | 188k | } |
<u32 as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1385 | 164k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1386 | 164k | FuncType::new(params, Some(<Self as WasmTy>::valtype())) | 1387 | 164k | } |
<u32 as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1385 | 70.6k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1386 | 70.6k | FuncType::new(params, Some(<Self as WasmTy>::valtype())) | 1387 | 70.6k | } |
<u32 as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1385 | 23.5k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1386 | 23.5k | FuncType::new(params, Some(<Self as WasmTy>::valtype())) | 1387 | 23.5k | } |
Unexecuted instantiation: <_ as wasmtime::func::WasmRet>::func_type::<_> <u32 as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1385 | 118k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1386 | 118k | FuncType::new(params, Some(<Self as WasmTy>::valtype())) | 1387 | 118k | } |
<u32 as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1385 | 94.9k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1386 | 94.9k | FuncType::new(params, Some(<Self as WasmTy>::valtype())) | 1387 | 94.9k | } |
<u32 as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1385 | 11.8k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1386 | 11.8k | FuncType::new(params, Some(<Self as WasmTy>::valtype())) | 1387 | 11.8k | } |
<u32 as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1385 | 83.1k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1386 | 83.1k | FuncType::new(params, Some(<Self as WasmTy>::valtype())) | 1387 | 83.1k | } |
<u32 as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1385 | 11.8k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1386 | 11.8k | FuncType::new(params, Some(<Self as WasmTy>::valtype())) | 1387 | 11.8k | } |
Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::func_type::<core::option::IntoIter<wasmtime::types::ValType>> <u32 as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1385 | 35.6k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1386 | 35.6k | FuncType::new(params, Some(<Self as WasmTy>::valtype())) | 1387 | 35.6k | } |
<u32 as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1385 | 83.1k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1386 | 83.1k | FuncType::new(params, Some(<Self as WasmTy>::valtype())) | 1387 | 83.1k | } |
<u32 as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1385 | 35.6k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1386 | 35.6k | FuncType::new(params, Some(<Self as WasmTy>::valtype())) | 1387 | 35.6k | } |
<u32 as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1385 | 11.8k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1386 | 11.8k | FuncType::new(params, Some(<Self as WasmTy>::valtype())) | 1387 | 11.8k | } |
|
1388 | | |
1389 | 0 | unsafe fn wrap_trampoline(ptr: *mut ValRaw, f: impl FnOnce(Self::Retptr) -> Self::Abi) { |
1390 | 0 | T::abi_into_raw(f(()), ptr); |
1391 | 0 | } Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::host_to_wasm_trampoline<u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline<i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::host_to_wasm_trampoline<u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline<u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::host_to_wasm_trampoline<core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline<i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <_ as wasmtime::func::WasmRet>::wrap_trampoline::<_> Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline<u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline<i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::host_to_wasm_trampoline<u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::host_to_wasm_trampoline<core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline<i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <u32 as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::host_to_wasm_trampoline<u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}> |
1392 | | |
1393 | 0 | fn into_fallible(self) -> Result<T, Trap> { |
1394 | 0 | Ok(self) |
1395 | 0 | } |
1396 | | |
1397 | 0 | fn fallible_from_trap(trap: Trap) -> Result<T, Trap> { |
1398 | 0 | Err(trap) |
1399 | 0 | } |
1400 | | } |
1401 | | |
1402 | | unsafe impl<T> WasmRet for Result<T, Trap> |
1403 | | where |
1404 | | T: WasmRet, |
1405 | | { |
1406 | | type Abi = <T as WasmRet>::Abi; |
1407 | | type Retptr = <T as WasmRet>::Retptr; |
1408 | | type Fallible = Self; |
1409 | | |
1410 | 498 | fn compatible_with_store(&self, store: &StoreOpaque) -> bool { |
1411 | 498 | match self { |
1412 | 498 | Ok(x) => <T as WasmRet>::compatible_with_store(x, store), |
1413 | 0 | Err(_) => true, |
1414 | | } |
1415 | 498 | } Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::compatible_with_store Unexecuted instantiation: <core::result::Result<_, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::compatible_with_store <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::compatible_with_store Line | Count | Source | 1410 | 498 | fn compatible_with_store(&self, store: &StoreOpaque) -> bool { | 1411 | 498 | match self { | 1412 | 498 | Ok(x) => <T as WasmRet>::compatible_with_store(x, store), | 1413 | 0 | Err(_) => true, | 1414 | | } | 1415 | 498 | } |
|
1416 | | |
1417 | 498 | unsafe fn into_abi_for_ret( |
1418 | 498 | self, |
1419 | 498 | store: &mut StoreOpaque, |
1420 | 498 | retptr: Self::Retptr, |
1421 | 498 | ) -> Result<Self::Abi, Trap> { |
1422 | 498 | self.and_then(|val| val.into_abi_for_ret(store, retptr)) Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::into_abi_for_ret::{closure#0}Unexecuted instantiation: <core::result::Result<_, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::into_abi_for_ret::{closure#0}<core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::into_abi_for_ret::{closure#0}Line | Count | Source | 1422 | 498 | self.and_then(|val| val.into_abi_for_ret(store, retptr)) |
|
1423 | 498 | } Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::into_abi_for_ret Unexecuted instantiation: <core::result::Result<_, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::into_abi_for_ret <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::into_abi_for_ret Line | Count | Source | 1417 | 498 | unsafe fn into_abi_for_ret( | 1418 | 498 | self, | 1419 | 498 | store: &mut StoreOpaque, | 1420 | 498 | retptr: Self::Retptr, | 1421 | 498 | ) -> Result<Self::Abi, Trap> { | 1422 | 498 | self.and_then(|val| val.into_abi_for_ret(store, retptr)) | 1423 | 498 | } |
|
1424 | | |
1425 | 1.45M | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { |
1426 | 1.45M | T::func_type(params) |
1427 | 1.45M | } <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1425 | 164k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1426 | 164k | T::func_type(params) | 1427 | 164k | } |
Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::func_type::<core::option::IntoIter<wasmtime::types::ValType>> <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1425 | 23.5k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1426 | 23.5k | T::func_type(params) | 1427 | 23.5k | } |
<core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1425 | 188k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1426 | 188k | T::func_type(params) | 1427 | 188k | } |
<core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1425 | 70.6k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1426 | 70.6k | T::func_type(params) | 1427 | 70.6k | } |
<core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1425 | 23.5k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1426 | 23.5k | T::func_type(params) | 1427 | 23.5k | } |
<core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1425 | 235k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1426 | 235k | T::func_type(params) | 1427 | 235k | } |
<core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1425 | 23.5k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1426 | 23.5k | T::func_type(params) | 1427 | 23.5k | } |
<core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1425 | 70.6k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1426 | 70.6k | T::func_type(params) | 1427 | 70.6k | } |
<core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1425 | 164k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1426 | 164k | T::func_type(params) | 1427 | 164k | } |
Unexecuted instantiation: <core::result::Result<_, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::func_type::<_> <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1425 | 11.8k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1426 | 11.8k | T::func_type(params) | 1427 | 11.8k | } |
<core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1425 | 11.8k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1426 | 11.8k | T::func_type(params) | 1427 | 11.8k | } |
<core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1425 | 35.6k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1426 | 35.6k | T::func_type(params) | 1427 | 35.6k | } |
<core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1425 | 94.9k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1426 | 94.9k | T::func_type(params) | 1427 | 94.9k | } |
<core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1425 | 11.8k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1426 | 11.8k | T::func_type(params) | 1427 | 11.8k | } |
<core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1425 | 118k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1426 | 118k | T::func_type(params) | 1427 | 118k | } |
<core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1425 | 83.1k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1426 | 83.1k | T::func_type(params) | 1427 | 83.1k | } |
<core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1425 | 83.1k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1426 | 83.1k | T::func_type(params) | 1427 | 83.1k | } |
<core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::func_type::<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::option::IntoIter<wasmtime::types::ValType>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>, core::option::IntoIter<wasmtime::types::ValType>>> Line | Count | Source | 1425 | 35.6k | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { | 1426 | 35.6k | T::func_type(params) | 1427 | 35.6k | } |
Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::func_type::<core::option::IntoIter<wasmtime::types::ValType>> |
1428 | | |
1429 | 0 | unsafe fn wrap_trampoline(ptr: *mut ValRaw, f: impl FnOnce(Self::Retptr) -> Self::Abi) { |
1430 | 0 | T::wrap_trampoline(ptr, f) |
1431 | 0 | } Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline<i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline<u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline<i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::host_to_wasm_trampoline<u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::host_to_wasm_trampoline<u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::host_to_wasm_trampoline<core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<_, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<_> Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::host_to_wasm_trampoline<u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::host_to_wasm_trampoline<u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline<i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline<u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline<i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::host_to_wasm_trampoline<core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::wrap_trampoline::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline<u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}> |
1432 | | |
1433 | 498 | fn into_fallible(self) -> Result<T, Trap> { |
1434 | 498 | self |
1435 | 498 | } Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::into_fallible Unexecuted instantiation: <core::result::Result<_, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::into_fallible <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::into_fallible Line | Count | Source | 1433 | 498 | fn into_fallible(self) -> Result<T, Trap> { | 1434 | 498 | self | 1435 | 498 | } |
|
1436 | | |
1437 | 0 | fn fallible_from_trap(trap: Trap) -> Result<T, Trap> { |
1438 | 0 | Err(trap) |
1439 | 0 | } Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::fallible_from_trap Unexecuted instantiation: <core::result::Result<_, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::fallible_from_trap Unexecuted instantiation: <core::result::Result<u32, wasmtime::trap::Trap> as wasmtime::func::WasmRet>::fallible_from_trap |
1440 | | } |
1441 | | |
1442 | | macro_rules! impl_wasm_host_results { |
1443 | | ($n:tt $($t:ident)*) => ( |
1444 | | #[allow(non_snake_case)] |
1445 | | unsafe impl<$($t),*> WasmRet for ($($t,)*) |
1446 | | where |
1447 | | $($t: WasmTy,)* |
1448 | | ($($t::Abi,)*): HostAbi, |
1449 | | { |
1450 | | type Abi = <($($t::Abi,)*) as HostAbi>::Abi; |
1451 | | type Retptr = <($($t::Abi,)*) as HostAbi>::Retptr; |
1452 | | type Fallible = Result<Self, Trap>; |
1453 | | |
1454 | | #[inline] |
1455 | 0 | fn compatible_with_store(&self, _store: &StoreOpaque) -> bool { |
1456 | 0 | let ($($t,)*) = self; |
1457 | 0 | $( $t.compatible_with_store(_store) && )* true |
1458 | 0 | } Unexecuted instantiation: <(_, _, _, _, _) as wasmtime::func::WasmRet>::compatible_with_store Unexecuted instantiation: <(_, _) as wasmtime::func::WasmRet>::compatible_with_store Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::compatible_with_store Unexecuted instantiation: <(_,) as wasmtime::func::WasmRet>::compatible_with_store Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::compatible_with_store Unexecuted instantiation: <(_, _, _, _, _, _) as wasmtime::func::WasmRet>::compatible_with_store Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::compatible_with_store Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::compatible_with_store Unexecuted instantiation: <(_, _, _, _, _, _, _) as wasmtime::func::WasmRet>::compatible_with_store Unexecuted instantiation: <() as wasmtime::func::WasmRet>::compatible_with_store Unexecuted instantiation: <(_, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::compatible_with_store Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::compatible_with_store Unexecuted instantiation: <(_, _, _, _) as wasmtime::func::WasmRet>::compatible_with_store Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::compatible_with_store Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::compatible_with_store Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::compatible_with_store Unexecuted instantiation: <(_, _, _) as wasmtime::func::WasmRet>::compatible_with_store |
1459 | | |
1460 | | #[inline] |
1461 | 0 | unsafe fn into_abi_for_ret(self, _store: &mut StoreOpaque, ptr: Self::Retptr) -> Result<Self::Abi, Trap> { |
1462 | 0 | let ($($t,)*) = self; |
1463 | 0 | let abi = ($($t.into_abi(_store),)*); |
1464 | 0 | Ok(<($($t::Abi,)*) as HostAbi>::into_abi(abi, ptr)) |
1465 | 0 | } Unexecuted instantiation: <(_, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::into_abi_for_ret Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::into_abi_for_ret Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::into_abi_for_ret Unexecuted instantiation: <(_, _, _, _, _, _, _) as wasmtime::func::WasmRet>::into_abi_for_ret Unexecuted instantiation: <(_, _) as wasmtime::func::WasmRet>::into_abi_for_ret Unexecuted instantiation: <(_, _, _) as wasmtime::func::WasmRet>::into_abi_for_ret Unexecuted instantiation: <() as wasmtime::func::WasmRet>::into_abi_for_ret Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::into_abi_for_ret Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::into_abi_for_ret Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::into_abi_for_ret Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::into_abi_for_ret Unexecuted instantiation: <(_, _, _, _, _) as wasmtime::func::WasmRet>::into_abi_for_ret Unexecuted instantiation: <(_, _, _, _) as wasmtime::func::WasmRet>::into_abi_for_ret Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::into_abi_for_ret Unexecuted instantiation: <(_,) as wasmtime::func::WasmRet>::into_abi_for_ret Unexecuted instantiation: <(_, _, _, _, _, _) as wasmtime::func::WasmRet>::into_abi_for_ret Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::into_abi_for_ret |
1466 | | |
1467 | 0 | fn func_type(params: impl Iterator<Item = ValType>) -> FuncType { |
1468 | 0 | FuncType::new( |
1469 | 0 | params, |
1470 | 0 | IntoIterator::into_iter([$($t::valtype(),)*]), |
1471 | 0 | ) |
1472 | 0 | } Unexecuted instantiation: <(_, _) as wasmtime::func::WasmRet>::func_type::<_> Unexecuted instantiation: <(_,) as wasmtime::func::WasmRet>::func_type::<_> Unexecuted instantiation: <(_, _, _) as wasmtime::func::WasmRet>::func_type::<_> Unexecuted instantiation: <() as wasmtime::func::WasmRet>::func_type::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::func_type::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::func_type::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::func_type::<_> Unexecuted instantiation: <(_, _, _, _) as wasmtime::func::WasmRet>::func_type::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _) as wasmtime::func::WasmRet>::func_type::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::func_type::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::func_type::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::func_type::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::func_type::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::func_type::<_> Unexecuted instantiation: <(_, _, _, _, _, _) as wasmtime::func::WasmRet>::func_type::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::func_type::<_> Unexecuted instantiation: <(_, _, _, _, _) as wasmtime::func::WasmRet>::func_type::<_> |
1473 | | |
1474 | | #[allow(unused_assignments)] |
1475 | 0 | unsafe fn wrap_trampoline(mut _ptr: *mut ValRaw, f: impl FnOnce(Self::Retptr) -> Self::Abi) { |
1476 | 0 | let ($($t,)*) = <($($t::Abi,)*) as HostAbi>::call(f); |
1477 | 0 | $( |
1478 | 0 | $t::abi_into_raw($t, _ptr); |
1479 | 0 | _ptr = _ptr.add(1); |
1480 | 0 | )* |
1481 | 0 | } Unexecuted instantiation: <(_, _) as wasmtime::func::WasmRet>::wrap_trampoline::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::wrap_trampoline::<_> Unexecuted instantiation: <() as wasmtime::func::WasmRet>::wrap_trampoline::<_> Unexecuted instantiation: <(_,) as wasmtime::func::WasmRet>::wrap_trampoline::<_> Unexecuted instantiation: <(_, _, _, _) as wasmtime::func::WasmRet>::wrap_trampoline::<_> Unexecuted instantiation: <(_, _, _) as wasmtime::func::WasmRet>::wrap_trampoline::<_> Unexecuted instantiation: <(_, _, _, _, _, _) as wasmtime::func::WasmRet>::wrap_trampoline::<_> Unexecuted instantiation: <(_, _, _, _, _) as wasmtime::func::WasmRet>::wrap_trampoline::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::wrap_trampoline::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::wrap_trampoline::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _) as wasmtime::func::WasmRet>::wrap_trampoline::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::wrap_trampoline::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::wrap_trampoline::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::wrap_trampoline::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::wrap_trampoline::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::wrap_trampoline::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::wrap_trampoline::<_> |
1482 | | |
1483 | | #[inline] |
1484 | 0 | fn into_fallible(self) -> Result<Self, Trap> { |
1485 | 0 | Ok(self) |
1486 | 0 | } Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::into_fallible Unexecuted instantiation: <(_, _, _, _) as wasmtime::func::WasmRet>::into_fallible Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::into_fallible Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::into_fallible Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::into_fallible Unexecuted instantiation: <() as wasmtime::func::WasmRet>::into_fallible Unexecuted instantiation: <(_, _, _, _, _) as wasmtime::func::WasmRet>::into_fallible Unexecuted instantiation: <(_, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::into_fallible Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::into_fallible Unexecuted instantiation: <(_, _, _, _, _, _, _) as wasmtime::func::WasmRet>::into_fallible Unexecuted instantiation: <(_,) as wasmtime::func::WasmRet>::into_fallible Unexecuted instantiation: <(_, _) as wasmtime::func::WasmRet>::into_fallible Unexecuted instantiation: <(_, _, _) as wasmtime::func::WasmRet>::into_fallible Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::into_fallible Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::into_fallible Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::into_fallible Unexecuted instantiation: <(_, _, _, _, _, _) as wasmtime::func::WasmRet>::into_fallible |
1487 | | |
1488 | | #[inline] |
1489 | 0 | fn fallible_from_trap(trap: Trap) -> Result<Self, Trap> { |
1490 | 0 | Err(trap) |
1491 | 0 | } Unexecuted instantiation: <(_, _, _, _, _, _, _) as wasmtime::func::WasmRet>::fallible_from_trap Unexecuted instantiation: <(_, _, _, _, _) as wasmtime::func::WasmRet>::fallible_from_trap Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::fallible_from_trap Unexecuted instantiation: <() as wasmtime::func::WasmRet>::fallible_from_trap Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::fallible_from_trap Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::fallible_from_trap Unexecuted instantiation: <(_, _, _) as wasmtime::func::WasmRet>::fallible_from_trap Unexecuted instantiation: <(_, _) as wasmtime::func::WasmRet>::fallible_from_trap Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::fallible_from_trap Unexecuted instantiation: <(_,) as wasmtime::func::WasmRet>::fallible_from_trap Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::fallible_from_trap Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::fallible_from_trap Unexecuted instantiation: <(_, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::fallible_from_trap Unexecuted instantiation: <(_, _, _, _, _, _) as wasmtime::func::WasmRet>::fallible_from_trap Unexecuted instantiation: <(_, _, _, _) as wasmtime::func::WasmRet>::fallible_from_trap Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::fallible_from_trap Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _) as wasmtime::func::WasmRet>::fallible_from_trap |
1492 | | } |
1493 | | ) |
1494 | | } |
1495 | | |
1496 | | for_each_function_signature!(impl_wasm_host_results); |
1497 | | |
1498 | | // Internal trait representing how to communicate tuples of return values across |
1499 | | // an ABI boundary. This internally corresponds to the "wasmtime" ABI inside of |
1500 | | // cranelift itself. Notably the first element of each tuple is returned via the |
1501 | | // typical system ABI (e.g. systemv or fastcall depending on platform) and all |
1502 | | // other values are returned packed via the stack. |
1503 | | // |
1504 | | // This trait helps to encapsulate all the details of that. |
1505 | | #[doc(hidden)] |
1506 | | pub trait HostAbi { |
1507 | | // A value returned from native functions which return `Self` |
1508 | | type Abi: Copy; |
1509 | | // A return pointer, added to the end of the argument list, for native |
1510 | | // functions that return `Self`. Note that a 0-sized type here should get |
1511 | | // elided at the ABI level. |
1512 | | type Retptr: Copy; |
1513 | | |
1514 | | // Converts a value of `self` into its components. Stores necessary values |
1515 | | // into `ptr` and then returns whatever needs to be returned from the |
1516 | | // function. |
1517 | | unsafe fn into_abi(self, ptr: Self::Retptr) -> Self::Abi; |
1518 | | |
1519 | | // Calls `f` with a suitably sized return area and requires `f` to return |
1520 | | // the raw abi value of the first element of our tuple. This will then |
1521 | | // unpack the `Retptr` and assemble it with `Self::Abi` to return an |
1522 | | // instance of the whole tuple. |
1523 | | unsafe fn call(f: impl FnOnce(Self::Retptr) -> Self::Abi) -> Self; |
1524 | | } |
1525 | | |
1526 | | macro_rules! impl_host_abi { |
1527 | | // Base case, everything is `()` |
1528 | | (0) => { |
1529 | | impl HostAbi for () { |
1530 | | type Abi = (); |
1531 | | type Retptr = (); |
1532 | | |
1533 | | #[inline] |
1534 | 0 | unsafe fn into_abi(self, _ptr: Self::Retptr) -> Self::Abi {} |
1535 | | |
1536 | | #[inline] |
1537 | 0 | unsafe fn call(f: impl FnOnce(Self::Retptr) -> Self::Abi) -> Self { |
1538 | 0 | f(()) |
1539 | 0 | } |
1540 | | } |
1541 | | }; |
1542 | | |
1543 | | // In the 1-case the retptr is not present, so it's a 0-sized value. |
1544 | | (1 $a:ident) => { |
1545 | | impl<$a: Copy> HostAbi for ($a,) { |
1546 | | type Abi = $a; |
1547 | | type Retptr = (); |
1548 | | |
1549 | 0 | unsafe fn into_abi(self, _ptr: Self::Retptr) -> Self::Abi { |
1550 | 0 | self.0 |
1551 | 0 | } |
1552 | | |
1553 | 20.4k | unsafe fn call(f: impl FnOnce(Self::Retptr) -> Self::Abi) -> Self { |
1554 | 20.4k | (f(()),) |
1555 | 20.4k | } <(u32,) as wasmtime::func::HostAbi>::call::<<(u32,) as wasmtime::func::typed::WasmParams>::invoke<u32>::{closure#0}>Line | Count | Source | 1553 | 18.7k | unsafe fn call(f: impl FnOnce(Self::Retptr) -> Self::Abi) -> Self { | 1554 | 18.7k | (f(()),) | 1555 | 18.7k | } |
Unexecuted instantiation: <(_,) as wasmtime::func::HostAbi>::call::<_> <(u32,) as wasmtime::func::HostAbi>::call::<<(u32,) as wasmtime::func::typed::WasmParams>::invoke<u32>::{closure#0}>Line | Count | Source | 1553 | 1.72k | unsafe fn call(f: impl FnOnce(Self::Retptr) -> Self::Abi) -> Self { | 1554 | 1.72k | (f(()),) | 1555 | 1.72k | } |
|
1556 | | } |
1557 | | }; |
1558 | | |
1559 | | // This is where the more interesting case happens. The first element of the |
1560 | | // tuple is returned via `Abi` and all other elements are returned via |
1561 | | // `Retptr`. We create a `TupleRetNN` structure to represent all of the |
1562 | | // return values here. |
1563 | | // |
1564 | | // Also note that this isn't implemented for the old backend right now due |
1565 | | // to the original author not really being sure how to implement this in the |
1566 | | // old backend. |
1567 | | ($n:tt $t:ident $($u:ident)*) => {paste::paste!{ |
1568 | | #[doc(hidden)] |
1569 | | #[allow(non_snake_case)] |
1570 | | #[repr(C)] |
1571 | | pub struct [<TupleRet $n>]<$($u,)*> { |
1572 | | $($u: $u,)* |
1573 | | } |
1574 | | |
1575 | | #[allow(non_snake_case, unused_assignments)] |
1576 | | impl<$t: Copy, $($u: Copy,)*> HostAbi for ($t, $($u,)*) { |
1577 | | type Abi = $t; |
1578 | | type Retptr = *mut [<TupleRet $n>]<$($u,)*>; |
1579 | | |
1580 | 0 | unsafe fn into_abi(self, ptr: Self::Retptr) -> Self::Abi { |
1581 | 0 | let ($t, $($u,)*) = self; |
1582 | 0 | // Store the tail of our tuple into the return pointer... |
1583 | 0 | $((*ptr).$u = $u;)* |
1584 | 0 | // ... and return the head raw. |
1585 | 0 | $t |
1586 | 0 | } Unexecuted instantiation: <(_, _, _, _) as wasmtime::func::HostAbi>::into_abi Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _) as wasmtime::func::HostAbi>::into_abi Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::HostAbi>::into_abi Unexecuted instantiation: <(_, _, _, _, _) as wasmtime::func::HostAbi>::into_abi Unexecuted instantiation: <(_, _, _, _, _, _, _) as wasmtime::func::HostAbi>::into_abi Unexecuted instantiation: <(_, _, _) as wasmtime::func::HostAbi>::into_abi Unexecuted instantiation: <(_, _, _, _, _, _) as wasmtime::func::HostAbi>::into_abi Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::HostAbi>::into_abi Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _) as wasmtime::func::HostAbi>::into_abi Unexecuted instantiation: <(_, _, _, _, _, _, _, _) as wasmtime::func::HostAbi>::into_abi Unexecuted instantiation: <(_, _) as wasmtime::func::HostAbi>::into_abi Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::HostAbi>::into_abi Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::HostAbi>::into_abi Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::HostAbi>::into_abi Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::HostAbi>::into_abi |
1587 | | |
1588 | 0 | unsafe fn call(f: impl FnOnce(Self::Retptr) -> Self::Abi) -> Self { |
1589 | 0 | // Create space to store all the return values and then invoke |
1590 | 0 | // the function. |
1591 | 0 | let mut space = std::mem::MaybeUninit::uninit(); |
1592 | 0 | let t = f(space.as_mut_ptr()); |
1593 | 0 | let space = space.assume_init(); |
1594 | 0 |
|
1595 | 0 | // Use the return value as the head of the tuple and unpack our |
1596 | 0 | // return area to get the rest of the tuple. |
1597 | 0 | (t, $(space.$u,)*) |
1598 | 0 | } Unexecuted instantiation: <(_, _, _) as wasmtime::func::HostAbi>::call::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _) as wasmtime::func::HostAbi>::call::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::HostAbi>::call::<_> Unexecuted instantiation: <(_, _, _, _) as wasmtime::func::HostAbi>::call::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _) as wasmtime::func::HostAbi>::call::<_> Unexecuted instantiation: <(_, _) as wasmtime::func::HostAbi>::call::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::HostAbi>::call::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::HostAbi>::call::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::HostAbi>::call::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::HostAbi>::call::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _) as wasmtime::func::HostAbi>::call::<_> Unexecuted instantiation: <(_, _, _, _, _) as wasmtime::func::HostAbi>::call::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _) as wasmtime::func::HostAbi>::call::<_> Unexecuted instantiation: <(_, _, _, _, _, _, _, _, _) as wasmtime::func::HostAbi>::call::<_> Unexecuted instantiation: <(_, _, _, _, _, _) as wasmtime::func::HostAbi>::call::<_> |
1599 | | } |
1600 | | }}; |
1601 | | } |
1602 | | |
1603 | | for_each_function_signature!(impl_host_abi); |
1604 | | |
1605 | | /// Internal trait implemented for all arguments that can be passed to |
1606 | | /// [`Func::wrap`] and [`Linker::func_wrap`](crate::Linker::func_wrap). |
1607 | | /// |
1608 | | /// This trait should not be implemented by external users, it's only intended |
1609 | | /// as an implementation detail of this crate. |
1610 | | pub trait IntoFunc<T, Params, Results>: Send + Sync + 'static { |
1611 | | #[doc(hidden)] |
1612 | | fn into_func( |
1613 | | self, |
1614 | | engine: &Engine, |
1615 | | ) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline); |
1616 | | } |
1617 | | |
1618 | | /// A structure representing the caller's context when creating a function |
1619 | | /// via [`Func::wrap`]. |
1620 | | /// |
1621 | | /// This structure can be taken as the first parameter of a closure passed to |
1622 | | /// [`Func::wrap`] or other constructors, and serves two purposes: |
1623 | | /// |
1624 | | /// * First consumers can use [`Caller<'_, T>`](crate::Caller) to get access to |
1625 | | /// [`StoreContextMut<'_, T>`](crate::StoreContextMut) and/or get access to |
1626 | | /// `T` itself. This means that the [`Caller`] type can serve as a proxy to |
1627 | | /// the original [`Store`](crate::Store) itself and is used to satisfy |
1628 | | /// [`AsContext`] and [`AsContextMut`] bounds. |
1629 | | /// |
1630 | | /// * Second a [`Caller`] can be used as the name implies, learning about the |
1631 | | /// caller's context, namely it's exported memory and exported functions. This |
1632 | | /// allows functions which take pointers as arguments to easily read the |
1633 | | /// memory the pointers point into, or if a function is expected to call |
1634 | | /// malloc in the wasm module to reserve space for the output you can do that. |
1635 | | /// |
1636 | | /// Host functions which want access to [`Store`](crate::Store)-level state are |
1637 | | /// recommended to use this type. |
1638 | | pub struct Caller<'a, T> { |
1639 | | pub(crate) store: StoreContextMut<'a, T>, |
1640 | | caller: &'a InstanceHandle, |
1641 | | } |
1642 | | |
1643 | | impl<T> Caller<'_, T> { |
1644 | 498 | unsafe fn with<R>(caller: *mut VMContext, f: impl FnOnce(Caller<'_, T>) -> R) -> R { |
1645 | 498 | assert!(!caller.is_null()); |
1646 | 498 | let instance = InstanceHandle::from_vmctx(caller); |
1647 | 498 | let store = StoreContextMut::from_raw(instance.store()); |
1648 | 498 | f(Caller { |
1649 | 498 | store, |
1650 | 498 | caller: &instance, |
1651 | 498 | }) |
1652 | 498 | } Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<_>>::with::<_, _> Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}><wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Line | Count | Source | 1644 | 498 | unsafe fn with<R>(caller: *mut VMContext, f: impl FnOnce(Caller<'_, T>) -> R) -> R { | 1645 | 498 | assert!(!caller.is_null()); | 1646 | 498 | let instance = InstanceHandle::from_vmctx(caller); | 1647 | 498 | let store = StoreContextMut::from_raw(instance.store()); | 1648 | 498 | f(Caller { | 1649 | 498 | store, | 1650 | 498 | caller: &instance, | 1651 | 498 | }) | 1652 | 498 | } |
Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}>Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::with::<<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::CallResult<u32>, <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}> |
1653 | | |
1654 | 498 | fn sub_caller(&mut self) -> Caller<'_, T> { |
1655 | 498 | Caller { |
1656 | 498 | store: self.store.as_context_mut(), |
1657 | 498 | caller: self.caller, |
1658 | 498 | } |
1659 | 498 | } Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::sub_caller Unexecuted instantiation: <wasmtime::func::Caller<_>>::sub_caller <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::sub_caller Line | Count | Source | 1654 | 498 | fn sub_caller(&mut self) -> Caller<'_, T> { | 1655 | 498 | Caller { | 1656 | 498 | store: self.store.as_context_mut(), | 1657 | 498 | caller: self.caller, | 1658 | 498 | } | 1659 | 498 | } |
|
1660 | | |
1661 | | /// Looks up an export from the caller's module by the `name` given. |
1662 | | /// |
1663 | | /// Note that when accessing and calling exported functions, one should |
1664 | | /// adhere to the guidelines of the interface types proposal. This method |
1665 | | /// is a temporary mechanism for accessing the caller's information until |
1666 | | /// interface types has been fully standardized and implemented. The |
1667 | | /// interface types proposal will obsolete this type and this will be |
1668 | | /// removed in the future at some point after interface types is |
1669 | | /// implemented. If you're relying on this method type it's recommended to |
1670 | | /// become familiar with interface types to ensure that your use case is |
1671 | | /// covered by the proposal. |
1672 | | /// |
1673 | | /// # Return |
1674 | | /// |
1675 | | /// If a memory or function export with the `name` provided was found, then it is |
1676 | | /// returned as a `Memory`. There are a number of situations, however, where |
1677 | | /// the memory or function may not be available: |
1678 | | /// |
1679 | | /// * The caller instance may not have an export named `name` |
1680 | | /// * The export named `name` may not be an exported memory |
1681 | | /// * There may not be a caller available, for example if `Func` was called |
1682 | | /// directly from host code. |
1683 | | /// |
1684 | | /// It's recommended to take care when calling this API and gracefully |
1685 | | /// handling a `None` return value. |
1686 | 0 | pub fn get_export(&mut self, name: &str) -> Option<Extern> { |
1687 | 0 | // All instances created have a `host_state` with a pointer pointing |
1688 | 0 | // back to themselves. If this caller doesn't have that `host_state` |
1689 | 0 | // then it probably means it was a host-created object like `Func::new` |
1690 | 0 | // which doesn't have any exports we want to return anyway. |
1691 | 0 | self.caller |
1692 | 0 | .host_state() |
1693 | 0 | .downcast_ref::<Instance>()? |
1694 | 0 | .get_export(&mut self.store, name) |
1695 | 0 | } |
1696 | | |
1697 | | /// Access the underlying data owned by this `Store`. |
1698 | | /// |
1699 | | /// Same as [`Store::data`](crate::Store::data) |
1700 | 498 | pub fn data(&self) -> &T { |
1701 | 498 | self.store.data() |
1702 | 498 | } Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::data Unexecuted instantiation: <wasmtime::func::Caller<_>>::data <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::data Line | Count | Source | 1700 | 498 | pub fn data(&self) -> &T { | 1701 | 498 | self.store.data() | 1702 | 498 | } |
|
1703 | | |
1704 | | /// Access the underlying data owned by this `Store`. |
1705 | | /// |
1706 | | /// Same as [`Store::data_mut`](crate::Store::data_mut) |
1707 | 0 | pub fn data_mut(&mut self) -> &mut T { |
1708 | 0 | self.store.data_mut() |
1709 | 0 | } |
1710 | | |
1711 | | /// Returns the underlying [`Engine`] this store is connected to. |
1712 | 0 | pub fn engine(&self) -> &Engine { |
1713 | 0 | self.store.engine() |
1714 | 0 | } |
1715 | | |
1716 | | /// Perform garbage collection of `ExternRef`s. |
1717 | | /// |
1718 | | /// Same as [`Store::gc`](crate::Store::gc). |
1719 | 0 | pub fn gc(&mut self) { |
1720 | 0 | self.store.gc() |
1721 | 0 | } |
1722 | | |
1723 | | /// Returns the fuel consumed by this store. |
1724 | | /// |
1725 | | /// For more information see [`Store::fuel_consumed`](crate::Store::fuel_consumed) |
1726 | 0 | pub fn fuel_consumed(&self) -> Option<u64> { |
1727 | 0 | self.store.fuel_consumed() |
1728 | 0 | } |
1729 | | |
1730 | | /// Inject more fuel into this store to be consumed when executing wasm code. |
1731 | | /// |
1732 | | /// For more information see [`Store::add_fuel`](crate::Store::add_fuel) |
1733 | 0 | pub fn add_fuel(&mut self, fuel: u64) -> Result<()> { |
1734 | 0 | self.store.add_fuel(fuel) |
1735 | 0 | } |
1736 | | |
1737 | | /// Synthetically consumes fuel from the store. |
1738 | | /// |
1739 | | /// For more information see [`Store::consume_fuel`](crate::Store::consume_fuel) |
1740 | 0 | pub fn consume_fuel(&mut self, fuel: u64) -> Result<u64> { |
1741 | 0 | self.store.consume_fuel(fuel) |
1742 | 0 | } |
1743 | | |
1744 | | /// Configures this `Store` to trap whenever fuel runs out. |
1745 | | /// |
1746 | | /// For more information see |
1747 | | /// [`Store::out_of_fuel_trap`](crate::Store::out_of_fuel_trap) |
1748 | 0 | pub fn out_of_fuel_trap(&mut self) { |
1749 | 0 | self.store.out_of_fuel_trap() |
1750 | 0 | } |
1751 | | |
1752 | | /// Configures this `Store` to yield while executing futures whenever fuel |
1753 | | /// runs out. |
1754 | | /// |
1755 | | /// For more information see |
1756 | | /// [`Store::out_of_fuel_async_yield`](crate::Store::out_of_fuel_async_yield) |
1757 | 0 | pub fn out_of_fuel_async_yield(&mut self, injection_count: u64, fuel_to_inject: u64) { |
1758 | 0 | self.store |
1759 | 0 | .out_of_fuel_async_yield(injection_count, fuel_to_inject) |
1760 | 0 | } |
1761 | | } |
1762 | | |
1763 | | impl<T> AsContext for Caller<'_, T> { |
1764 | | type Data = T; |
1765 | 0 | fn as_context(&self) -> StoreContext<'_, T> { |
1766 | 0 | self.store.as_context() |
1767 | 0 | } |
1768 | | } |
1769 | | |
1770 | | impl<T> AsContextMut for Caller<'_, T> { |
1771 | 1.38k | fn as_context_mut(&mut self) -> StoreContextMut<'_, T> { |
1772 | 1.38k | self.store.as_context_mut() |
1773 | 1.38k | } Unexecuted instantiation: <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as wasmtime::store::context::AsContextMut>::as_context_mut Unexecuted instantiation: <wasmtime::func::Caller<_> as wasmtime::store::context::AsContextMut>::as_context_mut <wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as wasmtime::store::context::AsContextMut>::as_context_mut Line | Count | Source | 1771 | 1.38k | fn as_context_mut(&mut self) -> StoreContextMut<'_, T> { | 1772 | 1.38k | self.store.as_context_mut() | 1773 | 1.38k | } |
|
1774 | | } |
1775 | | |
1776 | | macro_rules! impl_into_func { |
1777 | | ($num:tt $($args:ident)*) => { |
1778 | | // Implement for functions without a leading `&Caller` parameter, |
1779 | | // delegating to the implementation below which does have the leading |
1780 | | // `Caller` parameter. |
1781 | | #[allow(non_snake_case)] |
1782 | | impl<T, F, $($args,)* R> IntoFunc<T, ($($args,)*), R> for F |
1783 | | where |
1784 | | F: Fn($($args),*) -> R + Send + Sync + 'static, |
1785 | | $($args: WasmTy,)* |
1786 | | R: WasmRet, |
1787 | | { |
1788 | 0 | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { |
1789 | 0 | let f = move |_: Caller<'_, T>, $($args:$args),*| { |
1790 | | self($($args),*) |
1791 | | }; |
1792 | | |
1793 | 0 | f.into_func(engine) |
1794 | 0 | } Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _, _, _, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _, _, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_,), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func |
1795 | | } |
1796 | | |
1797 | | #[allow(non_snake_case)] |
1798 | | impl<T, F, $($args,)* R> IntoFunc<T, (Caller<'_, T>, $($args,)*), R> for F |
1799 | | where |
1800 | | F: Fn(Caller<'_, T>, $($args),*) -> R + Send + Sync + 'static, |
1801 | | $($args: WasmTy,)* |
1802 | | R: WasmRet, |
1803 | | { |
1804 | 1.45M | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { |
1805 | 1.45M | /// This shim is called by Wasm code, constructs a `Caller`, |
1806 | 1.45M | /// calls the wrapped host function, and returns the translated |
1807 | 1.45M | /// result back to Wasm. |
1808 | 1.45M | /// |
1809 | 1.45M | /// Note that this shim's ABI must *exactly* match that expected |
1810 | 1.45M | /// by Cranelift, since Cranelift is generating raw function |
1811 | 1.45M | /// calls directly to this function. |
1812 | 1.45M | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( |
1813 | 498 | vmctx: *mut VMOpaqueContext, |
1814 | 498 | caller_vmctx: *mut VMContext, |
1815 | 498 | $( $args: $args::Abi, )* |
1816 | 498 | retptr: R::Retptr, |
1817 | 498 | ) -> R::Abi |
1818 | 498 | where |
1819 | 498 | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, |
1820 | 498 | $( $args: WasmTy, )* |
1821 | 498 | R: WasmRet, |
1822 | 498 | { |
1823 | 498 | enum CallResult<U> { |
1824 | 498 | Ok(U), |
1825 | 498 | Trap(anyhow::Error), |
1826 | 498 | Panic(Box<dyn std::any::Any + Send>), |
1827 | 498 | } |
1828 | 498 | |
1829 | 498 | // Note that this `result` is intentionally scoped into a |
1830 | 498 | // separate block. Handling traps and panics will involve |
1831 | 498 | // longjmp-ing from this function which means we won't run |
1832 | 498 | // destructors. As a result anything requiring a destructor |
1833 | 498 | // should be part of this block, and the long-jmp-ing |
1834 | 498 | // happens after the block in handling `CallResult`. |
1835 | 498 | let result = Caller::with(caller_vmctx, |mut caller| { |
1836 | 1.45M | let vmctx = VMHostFuncContext::from_opaque(vmctx); |
1837 | 1.45M | let state = (*vmctx).host_state(); |
1838 | 1.45M | |
1839 | 1.45M | // Double-check ourselves in debug mode, but we control |
1840 | 1.45M | // the `Any` here so an unsafe downcast should also |
1841 | 1.45M | // work. |
1842 | 1.45M | debug_assert!(state.is::<F>()); |
1843 | 1.45M | let func = &*(state as *const _ as *const F); |
1844 | 1.45M | |
1845 | 1.45M | let ret = { |
1846 | 1.45M | panic::catch_unwind(AssertUnwindSafe(|| { |
1847 | 1.45M | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { |
1848 | 1.45M | return R::fallible_from_trap(trap); |
1849 | 1.45M | } |
1850 | 1.45M | $(let $args = $args::from_abi($args, caller.store.0);)* |
1851 | 1.45M | let r = func( |
1852 | 1.45M | caller.sub_caller(), |
1853 | 1.45M | $( $args, )* |
1854 | 1.45M | ); |
1855 | 1.45M | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { |
1856 | 1.45M | return R::fallible_from_trap(trap); |
1857 | 1.45M | } |
1858 | 1.45M | r.into_fallible() |
1859 | 1.45M | })) |
1860 | 1.45M | }; |
1861 | 1.45M | |
1862 | 1.45M | // Note that we need to be careful when dealing with traps |
1863 | 1.45M | // here. Traps are implemented with longjmp/setjmp meaning |
1864 | 1.45M | // that it's not unwinding and consequently no Rust |
1865 | 1.45M | // destructors are run. We need to be careful to ensure that |
1866 | 1.45M | // nothing on the stack needs a destructor when we exit |
1867 | 1.45M | // abnormally from this `match`, e.g. on `Err`, on |
1868 | 1.45M | // cross-store-issues, or if `Ok(Err)` is raised. |
1869 | 1.45M | match ret { |
1870 | 1.45M | Err(panic) => CallResult::Panic(panic), |
1871 | 1.45M | Ok(ret) => { |
1872 | 1.45M | // Because the wrapped function is not `unsafe`, we |
1873 | 1.45M | // can't assume it returned a value that is |
1874 | 1.45M | // compatible with this store. |
1875 | 1.45M | if !ret.compatible_with_store(caller.store.0) { |
1876 | 1.45M | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) |
1877 | 1.45M | } else { |
1878 | 1.45M | match ret.into_abi_for_ret(caller.store.0, retptr) { |
1879 | 1.45M | Ok(val) => CallResult::Ok(val), |
1880 | 1.45M | Err(trap) => CallResult::Trap(trap.into()), |
1881 | 1.45M | } |
1882 | 1.45M | } |
1883 | 1.45M | |
1884 | 1.45M | } |
1885 | 1.45M | } |
1886 | 1.45M | }); |
1887 | 498 | |
1888 | 498 | match result { |
1889 | 1.45M | CallResult::Ok(val) => val, |
1890 | 1.45M | CallResult::Trap(trap) => raise_user_trap(trap), |
1891 | 1.45M | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), |
1892 | 1.45M | } |
1893 | 1.45M | } Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<_, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>><_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>Line | Count | Source | 1812 | 498 | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 498 | vmctx: *mut VMOpaqueContext, | 1814 | 498 | caller_vmctx: *mut VMContext, | 1815 | 498 | $( $args: $args::Abi, )* | 1816 | 498 | retptr: R::Retptr, | 1817 | 498 | ) -> R::Abi | 1818 | 498 | where | 1819 | 498 | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 498 | $( $args: WasmTy, )* | 1821 | 498 | R: WasmRet, | 1822 | 498 | { | 1823 | 498 | enum CallResult<U> { | 1824 | 498 | Ok(U), | 1825 | 498 | Trap(anyhow::Error), | 1826 | 498 | Panic(Box<dyn std::any::Any + Send>), | 1827 | 498 | } | 1828 | 498 | | 1829 | 498 | // Note that this `result` is intentionally scoped into a | 1830 | 498 | // separate block. Handling traps and panics will involve | 1831 | 498 | // longjmp-ing from this function which means we won't run | 1832 | 498 | // destructors. As a result anything requiring a destructor | 1833 | 498 | // should be part of this block, and the long-jmp-ing | 1834 | 498 | // happens after the block in handling `CallResult`. | 1835 | 498 | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | | let state = (*vmctx).host_state(); | 1838 | | | 1839 | | // Double-check ourselves in debug mode, but we control | 1840 | | // the `Any` here so an unsafe downcast should also | 1841 | | // work. | 1842 | | debug_assert!(state.is::<F>()); | 1843 | | let func = &*(state as *const _ as *const F); | 1844 | | | 1845 | | let ret = { | 1846 | | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | | return R::fallible_from_trap(trap); | 1849 | | } | 1850 | | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | | let r = func( | 1852 | | caller.sub_caller(), | 1853 | | $( $args, )* | 1854 | | ); | 1855 | | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | | return R::fallible_from_trap(trap); | 1857 | | } | 1858 | | r.into_fallible() | 1859 | | })) | 1860 | | }; | 1861 | | | 1862 | | // Note that we need to be careful when dealing with traps | 1863 | | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | | // that it's not unwinding and consequently no Rust | 1865 | | // destructors are run. We need to be careful to ensure that | 1866 | | // nothing on the stack needs a destructor when we exit | 1867 | | // abnormally from this `match`, e.g. on `Err`, on | 1868 | | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | | match ret { | 1870 | | Err(panic) => CallResult::Panic(panic), | 1871 | | Ok(ret) => { | 1872 | | // Because the wrapped function is not `unsafe`, we | 1873 | | // can't assume it returned a value that is | 1874 | | // compatible with this store. | 1875 | | if !ret.compatible_with_store(caller.store.0) { | 1876 | | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | | } else { | 1878 | | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | | Ok(val) => CallResult::Ok(val), | 1880 | | Err(trap) => CallResult::Trap(trap.into()), | 1881 | | } | 1882 | | } | 1883 | | | 1884 | | } | 1885 | | } | 1886 | 498 | }); | 1887 | 498 | | 1888 | 498 | match result { | 1889 | 498 | CallResult::Ok(val) => val, | 1890 | 0 | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 0 | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | | } | 1893 | 498 | } |
Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> |
1894 | 1.45M | |
1895 | 1.45M | /// This trampoline allows host code to indirectly call the |
1896 | 1.45M | /// wrapped function (e.g. via `Func::call` on a `funcref` that |
1897 | 1.45M | /// happens to reference our wrapped function). |
1898 | 1.45M | /// |
1899 | 1.45M | /// It reads the arguments out of the incoming `args` array, |
1900 | 1.45M | /// calls the given function pointer, and then stores the result |
1901 | 1.45M | /// back into the `args` array. |
1902 | 1.45M | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( |
1903 | 0 | callee_vmctx: *mut VMOpaqueContext, |
1904 | 0 | caller_vmctx: *mut VMContext, |
1905 | 0 | ptr: *const VMFunctionBody, |
1906 | 0 | args: *mut ValRaw, |
1907 | 0 | ) |
1908 | 0 | where |
1909 | 0 | $($args: WasmTy,)* |
1910 | 0 | R: WasmRet, |
1911 | 0 | { |
1912 | 0 | let ptr = mem::transmute::< |
1913 | 0 | *const VMFunctionBody, |
1914 | 0 | unsafe extern "C" fn( |
1915 | 0 | *mut VMOpaqueContext, |
1916 | 0 | *mut VMContext, |
1917 | 0 | $( $args::Abi, )* |
1918 | 0 | R::Retptr, |
1919 | 0 | ) -> R::Abi, |
1920 | 0 | >(ptr); |
1921 | 0 |
|
1922 | 0 | let mut _n = 0; |
1923 | 0 | $( |
1924 | 0 | let $args = $args::abi_from_raw(args.add(_n)); |
1925 | 0 | _n += 1; |
1926 | 0 | )* |
1927 | 0 | R::wrap_trampoline(args, |retptr| { |
1928 | 1.45M | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) |
1929 | 1.45M | }); |
1930 | 0 | } Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u64, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline::<i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::host_to_wasm_trampoline::<u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline::<i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::host_to_wasm_trampoline::<core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::host_to_wasm_trampoline::<u64, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _, _, _, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::host_to_wasm_trampoline::<_, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::host_to_wasm_trampoline::<_> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _, _, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _, _, _, _, _, _, _, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline::<i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::host_to_wasm_trampoline::<u64, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline::<i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::host_to_wasm_trampoline::<u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u64, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::host_to_wasm_trampoline::<core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>> |
1931 | 1.45M | |
1932 | 1.45M | let ty = R::func_type( |
1933 | 1.45M | None::<ValType>.into_iter() |
1934 | 1.45M | $(.chain(Some($args::valtype())))* |
1935 | 1.45M | ); |
1936 | 1.45M | |
1937 | 1.45M | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); |
1938 | 1.45M | |
1939 | 1.45M | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; |
1940 | 1.45M | |
1941 | 1.45M | let ctx = unsafe { |
1942 | 1.45M | VMHostFuncContext::new( |
1943 | 1.45M | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), |
1944 | 1.45M | shared_signature_id, |
1945 | 1.45M | Box::new(self), |
1946 | 1.45M | ) |
1947 | 1.45M | }; |
1948 | 1.45M | |
1949 | 1.45M | (ctx, shared_signature_id, trampoline) |
1950 | 1.45M | } Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, i64, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, i64, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, i32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u64, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, i64), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, i64, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, i32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, i64, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, i64), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, i64, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, i64, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 23.5k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 23.5k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 23.5k | /// calls the wrapped host function, and returns the translated | 1807 | 23.5k | /// result back to Wasm. | 1808 | 23.5k | /// | 1809 | 23.5k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 23.5k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 23.5k | /// calls directly to this function. | 1812 | 23.5k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 23.5k | vmctx: *mut VMOpaqueContext, | 1814 | 23.5k | caller_vmctx: *mut VMContext, | 1815 | 23.5k | $( $args: $args::Abi, )* | 1816 | 23.5k | retptr: R::Retptr, | 1817 | 23.5k | ) -> R::Abi | 1818 | 23.5k | where | 1819 | 23.5k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 23.5k | $( $args: WasmTy, )* | 1821 | 23.5k | R: WasmRet, | 1822 | 23.5k | { | 1823 | 23.5k | enum CallResult<U> { | 1824 | 23.5k | Ok(U), | 1825 | 23.5k | Trap(anyhow::Error), | 1826 | 23.5k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 23.5k | } | 1828 | 23.5k | | 1829 | 23.5k | // Note that this `result` is intentionally scoped into a | 1830 | 23.5k | // separate block. Handling traps and panics will involve | 1831 | 23.5k | // longjmp-ing from this function which means we won't run | 1832 | 23.5k | // destructors. As a result anything requiring a destructor | 1833 | 23.5k | // should be part of this block, and the long-jmp-ing | 1834 | 23.5k | // happens after the block in handling `CallResult`. | 1835 | 23.5k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 23.5k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 23.5k | let state = (*vmctx).host_state(); | 1838 | 23.5k | | 1839 | 23.5k | // Double-check ourselves in debug mode, but we control | 1840 | 23.5k | // the `Any` here so an unsafe downcast should also | 1841 | 23.5k | // work. | 1842 | 23.5k | debug_assert!(state.is::<F>()); | 1843 | 23.5k | let func = &*(state as *const _ as *const F); | 1844 | 23.5k | | 1845 | 23.5k | let ret = { | 1846 | 23.5k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 23.5k | return R::fallible_from_trap(trap); | 1849 | 23.5k | } | 1850 | 23.5k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 23.5k | let r = func( | 1852 | 23.5k | caller.sub_caller(), | 1853 | 23.5k | $( $args, )* | 1854 | 23.5k | ); | 1855 | 23.5k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 23.5k | return R::fallible_from_trap(trap); | 1857 | 23.5k | } | 1858 | 23.5k | r.into_fallible() | 1859 | 23.5k | })) | 1860 | 23.5k | }; | 1861 | 23.5k | | 1862 | 23.5k | // Note that we need to be careful when dealing with traps | 1863 | 23.5k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 23.5k | // that it's not unwinding and consequently no Rust | 1865 | 23.5k | // destructors are run. We need to be careful to ensure that | 1866 | 23.5k | // nothing on the stack needs a destructor when we exit | 1867 | 23.5k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 23.5k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 23.5k | match ret { | 1870 | 23.5k | Err(panic) => CallResult::Panic(panic), | 1871 | 23.5k | Ok(ret) => { | 1872 | 23.5k | // Because the wrapped function is not `unsafe`, we | 1873 | 23.5k | // can't assume it returned a value that is | 1874 | 23.5k | // compatible with this store. | 1875 | 23.5k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 23.5k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 23.5k | } else { | 1878 | 23.5k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 23.5k | Ok(val) => CallResult::Ok(val), | 1880 | 23.5k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 23.5k | } | 1882 | 23.5k | } | 1883 | 23.5k | | 1884 | 23.5k | } | 1885 | 23.5k | } | 1886 | 23.5k | }); | 1887 | 23.5k | | 1888 | 23.5k | match result { | 1889 | 23.5k | CallResult::Ok(val) => val, | 1890 | 23.5k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 23.5k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 23.5k | } | 1893 | 23.5k | } | 1894 | 23.5k | | 1895 | 23.5k | /// This trampoline allows host code to indirectly call the | 1896 | 23.5k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 23.5k | /// happens to reference our wrapped function). | 1898 | 23.5k | /// | 1899 | 23.5k | /// It reads the arguments out of the incoming `args` array, | 1900 | 23.5k | /// calls the given function pointer, and then stores the result | 1901 | 23.5k | /// back into the `args` array. | 1902 | 23.5k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 23.5k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 23.5k | caller_vmctx: *mut VMContext, | 1905 | 23.5k | ptr: *const VMFunctionBody, | 1906 | 23.5k | args: *mut ValRaw, | 1907 | 23.5k | ) | 1908 | 23.5k | where | 1909 | 23.5k | $($args: WasmTy,)* | 1910 | 23.5k | R: WasmRet, | 1911 | 23.5k | { | 1912 | 23.5k | let ptr = mem::transmute::< | 1913 | 23.5k | *const VMFunctionBody, | 1914 | 23.5k | unsafe extern "C" fn( | 1915 | 23.5k | *mut VMOpaqueContext, | 1916 | 23.5k | *mut VMContext, | 1917 | 23.5k | $( $args::Abi, )* | 1918 | 23.5k | R::Retptr, | 1919 | 23.5k | ) -> R::Abi, | 1920 | 23.5k | >(ptr); | 1921 | 23.5k | | 1922 | 23.5k | let mut _n = 0; | 1923 | 23.5k | $( | 1924 | 23.5k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 23.5k | _n += 1; | 1926 | 23.5k | )* | 1927 | 23.5k | R::wrap_trampoline(args, |retptr| { | 1928 | 23.5k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 23.5k | }); | 1930 | 23.5k | } | 1931 | 23.5k | | 1932 | 23.5k | let ty = R::func_type( | 1933 | 23.5k | None::<ValType>.into_iter() | 1934 | 23.5k | $(.chain(Some($args::valtype())))* | 1935 | 23.5k | ); | 1936 | 23.5k | | 1937 | 23.5k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 23.5k | | 1939 | 23.5k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 23.5k | | 1941 | 23.5k | let ctx = unsafe { | 1942 | 23.5k | VMHostFuncContext::new( | 1943 | 23.5k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 23.5k | shared_signature_id, | 1945 | 23.5k | Box::new(self), | 1946 | 23.5k | ) | 1947 | 23.5k | }; | 1948 | 23.5k | | 1949 | 23.5k | (ctx, shared_signature_id, trampoline) | 1950 | 23.5k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, i64, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, i64, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, i64, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, i64), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, i64, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, i32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, i64, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, i64, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, i64), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u64, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, i32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcUnexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
Unexecuted instantiation: <<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_func<<wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1} as wasmtime::func::IntoFunc<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>>>::into_funcLine | Count | Source | 1804 | 11.8k | fn into_func(self, engine: &Engine) -> (Box<VMHostFuncContext>, VMSharedSignatureIndex, VMTrampoline) { | 1805 | 11.8k | /// This shim is called by Wasm code, constructs a `Caller`, | 1806 | 11.8k | /// calls the wrapped host function, and returns the translated | 1807 | 11.8k | /// result back to Wasm. | 1808 | 11.8k | /// | 1809 | 11.8k | /// Note that this shim's ABI must *exactly* match that expected | 1810 | 11.8k | /// by Cranelift, since Cranelift is generating raw function | 1811 | 11.8k | /// calls directly to this function. | 1812 | 11.8k | unsafe extern "C" fn wasm_to_host_shim<T, F, $($args,)* R>( | 1813 | 11.8k | vmctx: *mut VMOpaqueContext, | 1814 | 11.8k | caller_vmctx: *mut VMContext, | 1815 | 11.8k | $( $args: $args::Abi, )* | 1816 | 11.8k | retptr: R::Retptr, | 1817 | 11.8k | ) -> R::Abi | 1818 | 11.8k | where | 1819 | 11.8k | F: Fn(Caller<'_, T>, $( $args ),*) -> R + 'static, | 1820 | 11.8k | $( $args: WasmTy, )* | 1821 | 11.8k | R: WasmRet, | 1822 | 11.8k | { | 1823 | 11.8k | enum CallResult<U> { | 1824 | 11.8k | Ok(U), | 1825 | 11.8k | Trap(anyhow::Error), | 1826 | 11.8k | Panic(Box<dyn std::any::Any + Send>), | 1827 | 11.8k | } | 1828 | 11.8k | | 1829 | 11.8k | // Note that this `result` is intentionally scoped into a | 1830 | 11.8k | // separate block. Handling traps and panics will involve | 1831 | 11.8k | // longjmp-ing from this function which means we won't run | 1832 | 11.8k | // destructors. As a result anything requiring a destructor | 1833 | 11.8k | // should be part of this block, and the long-jmp-ing | 1834 | 11.8k | // happens after the block in handling `CallResult`. | 1835 | 11.8k | let result = Caller::with(caller_vmctx, |mut caller| { | 1836 | 11.8k | let vmctx = VMHostFuncContext::from_opaque(vmctx); | 1837 | 11.8k | let state = (*vmctx).host_state(); | 1838 | 11.8k | | 1839 | 11.8k | // Double-check ourselves in debug mode, but we control | 1840 | 11.8k | // the `Any` here so an unsafe downcast should also | 1841 | 11.8k | // work. | 1842 | 11.8k | debug_assert!(state.is::<F>()); | 1843 | 11.8k | let func = &*(state as *const _ as *const F); | 1844 | 11.8k | | 1845 | 11.8k | let ret = { | 1846 | 11.8k | panic::catch_unwind(AssertUnwindSafe(|| { | 1847 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::CallingHost) { | 1848 | 11.8k | return R::fallible_from_trap(trap); | 1849 | 11.8k | } | 1850 | 11.8k | $(let $args = $args::from_abi($args, caller.store.0);)* | 1851 | 11.8k | let r = func( | 1852 | 11.8k | caller.sub_caller(), | 1853 | 11.8k | $( $args, )* | 1854 | 11.8k | ); | 1855 | 11.8k | if let Err(trap) = caller.store.0.call_hook(CallHook::ReturningFromHost) { | 1856 | 11.8k | return R::fallible_from_trap(trap); | 1857 | 11.8k | } | 1858 | 11.8k | r.into_fallible() | 1859 | 11.8k | })) | 1860 | 11.8k | }; | 1861 | 11.8k | | 1862 | 11.8k | // Note that we need to be careful when dealing with traps | 1863 | 11.8k | // here. Traps are implemented with longjmp/setjmp meaning | 1864 | 11.8k | // that it's not unwinding and consequently no Rust | 1865 | 11.8k | // destructors are run. We need to be careful to ensure that | 1866 | 11.8k | // nothing on the stack needs a destructor when we exit | 1867 | 11.8k | // abnormally from this `match`, e.g. on `Err`, on | 1868 | 11.8k | // cross-store-issues, or if `Ok(Err)` is raised. | 1869 | 11.8k | match ret { | 1870 | 11.8k | Err(panic) => CallResult::Panic(panic), | 1871 | 11.8k | Ok(ret) => { | 1872 | 11.8k | // Because the wrapped function is not `unsafe`, we | 1873 | 11.8k | // can't assume it returned a value that is | 1874 | 11.8k | // compatible with this store. | 1875 | 11.8k | if !ret.compatible_with_store(caller.store.0) { | 1876 | 11.8k | CallResult::Trap(anyhow::anyhow!("host function attempted to return cross-`Store` value to Wasm")) | 1877 | 11.8k | } else { | 1878 | 11.8k | match ret.into_abi_for_ret(caller.store.0, retptr) { | 1879 | 11.8k | Ok(val) => CallResult::Ok(val), | 1880 | 11.8k | Err(trap) => CallResult::Trap(trap.into()), | 1881 | 11.8k | } | 1882 | 11.8k | } | 1883 | 11.8k | | 1884 | 11.8k | } | 1885 | 11.8k | } | 1886 | 11.8k | }); | 1887 | 11.8k | | 1888 | 11.8k | match result { | 1889 | 11.8k | CallResult::Ok(val) => val, | 1890 | 11.8k | CallResult::Trap(trap) => raise_user_trap(trap), | 1891 | 11.8k | CallResult::Panic(panic) => wasmtime_runtime::resume_panic(panic), | 1892 | 11.8k | } | 1893 | 11.8k | } | 1894 | 11.8k | | 1895 | 11.8k | /// This trampoline allows host code to indirectly call the | 1896 | 11.8k | /// wrapped function (e.g. via `Func::call` on a `funcref` that | 1897 | 11.8k | /// happens to reference our wrapped function). | 1898 | 11.8k | /// | 1899 | 11.8k | /// It reads the arguments out of the incoming `args` array, | 1900 | 11.8k | /// calls the given function pointer, and then stores the result | 1901 | 11.8k | /// back into the `args` array. | 1902 | 11.8k | unsafe extern "C" fn host_to_wasm_trampoline<$($args,)* R>( | 1903 | 11.8k | callee_vmctx: *mut VMOpaqueContext, | 1904 | 11.8k | caller_vmctx: *mut VMContext, | 1905 | 11.8k | ptr: *const VMFunctionBody, | 1906 | 11.8k | args: *mut ValRaw, | 1907 | 11.8k | ) | 1908 | 11.8k | where | 1909 | 11.8k | $($args: WasmTy,)* | 1910 | 11.8k | R: WasmRet, | 1911 | 11.8k | { | 1912 | 11.8k | let ptr = mem::transmute::< | 1913 | 11.8k | *const VMFunctionBody, | 1914 | 11.8k | unsafe extern "C" fn( | 1915 | 11.8k | *mut VMOpaqueContext, | 1916 | 11.8k | *mut VMContext, | 1917 | 11.8k | $( $args::Abi, )* | 1918 | 11.8k | R::Retptr, | 1919 | 11.8k | ) -> R::Abi, | 1920 | 11.8k | >(ptr); | 1921 | 11.8k | | 1922 | 11.8k | let mut _n = 0; | 1923 | 11.8k | $( | 1924 | 11.8k | let $args = $args::abi_from_raw(args.add(_n)); | 1925 | 11.8k | _n += 1; | 1926 | 11.8k | )* | 1927 | 11.8k | R::wrap_trampoline(args, |retptr| { | 1928 | 11.8k | ptr(callee_vmctx, caller_vmctx, $( $args, )* retptr) | 1929 | 11.8k | }); | 1930 | 11.8k | } | 1931 | 11.8k | | 1932 | 11.8k | let ty = R::func_type( | 1933 | 11.8k | None::<ValType>.into_iter() | 1934 | 11.8k | $(.chain(Some($args::valtype())))* | 1935 | 11.8k | ); | 1936 | 11.8k | | 1937 | 11.8k | let shared_signature_id = engine.signatures().register(ty.as_wasm_func_type()); | 1938 | 11.8k | | 1939 | 11.8k | let trampoline = host_to_wasm_trampoline::<$($args,)* R>; | 1940 | 11.8k | | 1941 | 11.8k | let ctx = unsafe { | 1942 | 11.8k | VMHostFuncContext::new( | 1943 | 11.8k | NonNull::new(wasm_to_host_shim::<T, F, $($args,)* R> as *mut _).unwrap(), | 1944 | 11.8k | shared_signature_id, | 1945 | 11.8k | Box::new(self), | 1946 | 11.8k | ) | 1947 | 11.8k | }; | 1948 | 11.8k | | 1949 | 11.8k | (ctx, shared_signature_id, trampoline) | 1950 | 11.8k | } |
|
1951 | | } |
1952 | | } |
1953 | | } |
1954 | | |
1955 | 498 | for_each_function_signature!(impl_into_func); Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline::<i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::host_to_wasm_trampoline::<u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::host_to_wasm_trampoline::<u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::host_to_wasm_trampoline::<core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline::<i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _, _, _, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _, _, _, _, _, _, _), _>>::into_func::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _, _), _>>::into_func::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<_, _, _>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _, _, _), _>>::into_func::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _), _>>::into_func::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _), _>>::into_func::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _, _, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _, _, _, _, _), _>>::into_func::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _), _>>::into_func::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::host_to_wasm_trampoline::<_>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _, _>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _, _, _>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::host_to_wasm_trampoline::<_, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _), _>>::into_func::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _, _, _, _, _, _), _>>::into_func::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _, _, _, _>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _, _, _, _), _>>::into_func::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _, _, _, _, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _, _, _, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (), _>>::into_func::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _), _>>::into_func::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _, _, _, _>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<_, _, _, _, _, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (_,), _>>::into_func::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<_, _, _, _>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<_, _, _>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::host_to_wasm_trampoline::<u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline::<i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::host_to_wasm_trampoline::<core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Line | Count | Source | 1955 | 498 | for_each_function_signature!(impl_into_func); |
Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline::<i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u64, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}<_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Line | Count | Source | 1955 | 498 | for_each_function_signature!(impl_into_func); |
Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::host_to_wasm_trampoline::<u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::host_to_wasm_trampoline::<u32, u32, i64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, i64, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>,), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, u32, u64, u32, u64, u64, u64, u64, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0}::{closure#0}Unexecuted instantiation: <_ as wasmtime::func::IntoFunc<_, (wasmtime::func::Caller<_>, _, _, _, _, _), _>>::into_func::wasm_to_host_shim::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}, u32, u32, u32, u32, u32, core::result::Result<u32, wasmtime::trap::Trap>>::{closure#0} |
1956 | | |
1957 | | /// Representation of a host-defined function. |
1958 | | /// |
1959 | | /// This is used for `Func::new` but also for `Linker`-defined functions. For |
1960 | | /// `Func::new` this is stored within a `Store`, and for `Linker`-defined |
1961 | | /// functions they wrap this up in `Arc` to enable shared ownership of this |
1962 | | /// across many stores. |
1963 | | /// |
1964 | | /// Technically this structure needs a `<T>` type parameter to connect to the |
1965 | | /// `Store<T>` itself, but that's an unsafe contract of using this for now |
1966 | | /// rather than part of the struct type (to avoid `Func<T>` in the API). |
1967 | | pub(crate) struct HostFunc { |
1968 | | // The host function context that is shared with our host-to-Wasm |
1969 | | // trampoline. |
1970 | | ctx: Box<VMHostFuncContext>, |
1971 | | |
1972 | | // The index for this function's signature within the engine-wide shared |
1973 | | // signature registry. |
1974 | | signature: VMSharedSignatureIndex, |
1975 | | |
1976 | | // Trampoline to enter this function from Rust. |
1977 | | host_to_wasm_trampoline: VMTrampoline, |
1978 | | |
1979 | | // Stored to unregister this function's signature with the engine when this |
1980 | | // is dropped. |
1981 | | engine: Engine, |
1982 | | } |
1983 | | |
1984 | | impl HostFunc { |
1985 | | /// Analog of [`Func::new`] |
1986 | | #[cfg(compiler)] |
1987 | 0 | pub fn new<T>( |
1988 | 0 | engine: &Engine, |
1989 | 0 | ty: FuncType, |
1990 | 0 | func: impl Fn(Caller<'_, T>, &[Val], &mut [Val]) -> Result<(), Trap> + Send + Sync + 'static, |
1991 | 0 | ) -> Self { |
1992 | 0 | let ty_clone = ty.clone(); |
1993 | 0 | unsafe { |
1994 | 0 | HostFunc::new_unchecked(engine, ty, move |caller, values| { |
1995 | 0 | Func::invoke(caller, &ty_clone, values, &func) |
1996 | 0 | }) |
1997 | 0 | } |
1998 | 0 | } |
1999 | | |
2000 | | /// Analog of [`Func::new_unchecked`] |
2001 | | #[cfg(compiler)] |
2002 | 0 | pub unsafe fn new_unchecked<T>( |
2003 | 0 | engine: &Engine, |
2004 | 0 | ty: FuncType, |
2005 | 0 | func: impl Fn(Caller<'_, T>, &mut [ValRaw]) -> Result<(), Trap> + Send + Sync + 'static, |
2006 | 0 | ) -> Self { |
2007 | 0 | let func = move |caller_vmctx, values: &mut [ValRaw]| { |
2008 | 0 | Caller::<T>::with(caller_vmctx, |mut caller| { |
2009 | 0 | caller.store.0.call_hook(CallHook::CallingHost)?; |
2010 | 0 | let result = func(caller.sub_caller(), values)?; |
2011 | 0 | caller.store.0.call_hook(CallHook::ReturningFromHost)?; |
2012 | 0 | Ok(result) |
2013 | 0 | }) |
2014 | 0 | }; |
2015 | 0 | let (ctx, signature, trampoline) = crate::trampoline::create_function(&ty, func, engine) |
2016 | 0 | .expect("failed to create function"); |
2017 | 0 | HostFunc::_new(engine, ctx, signature, trampoline) |
2018 | 0 | } |
2019 | | |
2020 | | /// Analog of [`Func::wrap`] |
2021 | 1.45M | pub fn wrap<T, Params, Results>( |
2022 | 1.45M | engine: &Engine, |
2023 | 1.45M | func: impl IntoFunc<T, Params, Results>, |
2024 | 1.45M | ) -> Self { |
2025 | 1.45M | let (ctx, signature, trampoline) = func.into_func(engine); |
2026 | 1.45M | HostFunc::_new(engine, ctx, signature, trampoline) |
2027 | 1.45M | } <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, i64, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u64, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, i32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, i64, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, i64, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, i64), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, i64, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, i64, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, i64, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, i64), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, i32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 23.5k | pub fn wrap<T, Params, Results>( | 2022 | 23.5k | engine: &Engine, | 2023 | 23.5k | func: impl IntoFunc<T, Params, Results>, | 2024 | 23.5k | ) -> Self { | 2025 | 23.5k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 23.5k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 23.5k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<_, _, _, _> <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_aggregate_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::next_actor_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, i64), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::network::NetworkContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, i32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, i64, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::resolve_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::enabled<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::hash<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, i64), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, i64), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::charge_gas<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, i64, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<fvm::syscalls::vm::Never, fvm::syscalls::error::Abort>, fvm::syscalls::vm::exit<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::lookup_address<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, i32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_code_cid_for_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::batch_verify_seals<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_read<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, i64, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_builtin_actor_type<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_signature<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u64, u32, u64, u64, u64, u64), core::result::Result<fvm_shared::sys::out::send::Send, fvm::kernel::error::ExecutionError>, fvm::syscalls::send::send<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u64, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldStat, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_stat<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::event::emit_event<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_replica_update<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<fvm_shared::sys::out::ipld::IpldOpen, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_open<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
<wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::out::vm::MessageContext, fvm::kernel::error::ExecutionError>, fvm::syscalls::vm::message_context<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_post<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::get_actor_code_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_create<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::log<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<i32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_seal<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::create_actor<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u64,), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::actor::balance_of<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::self_destruct<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32), core::result::Result<[u8; 65], fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::recover_secp_public_key<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u64, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u64, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::ipld::block_link<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::debug::store_artifact<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, i64, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_chain_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::current_balance<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::tipset_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, i64, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, u32, u32, u32, u32), core::result::Result<u32, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::compute_unsealed_sector_cid<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32,), core::result::Result<(), fvm::kernel::error::ExecutionError>, fvm::syscalls::sself::set_root<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>,), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<u64, fvm::kernel::error::ExecutionError>, fvm::syscalls::gas::available<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}><wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(), core::result::Result<fvm_shared::sys::TokenAmount, fvm::kernel::error::ExecutionError>, fvm::syscalls::network::total_fil_circ_supply<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#1}>Line | Count | Source | 2021 | 11.8k | pub fn wrap<T, Params, Results>( | 2022 | 11.8k | engine: &Engine, | 2023 | 11.8k | func: impl IntoFunc<T, Params, Results>, | 2024 | 11.8k | ) -> Self { | 2025 | 11.8k | let (ctx, signature, trampoline) = func.into_func(engine); | 2026 | 11.8k | HostFunc::_new(engine, ctx, signature, trampoline) | 2027 | 11.8k | } |
Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, i64, i64, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(i64, i64, u32, u32), core::result::Result<[u8; 32], fvm::kernel::error::ExecutionError>, fvm::syscalls::rand::get_beacon_randomness<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}>Unexecuted instantiation: <wasmtime::func::HostFunc>::wrap::<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>, (wasmtime::func::Caller<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>, u32, u32, u32, u32, u32, u32), core::result::Result<u32, wasmtime::trap::Trap>, <wasmtime::linker::Linker<fvm::syscalls::InvocationData<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>> as fvm::syscalls::bind::BindSyscall<(u32, u32, u32, u32, u32, u32), core::result::Result<fvm_shared::sys::out::crypto::VerifyConsensusFault, fvm::kernel::error::ExecutionError>, fvm::syscalls::crypto::verify_consensus_fault<fvm::kernel::default::DefaultKernel<fvm::call_manager::default::DefaultCallManager<fvm::machine::default::DefaultMachine<fvm_ipld_blockstore::memory::MemoryBlockstore, fvm_integration_tests::dummy::DummyExterns>>>>>>::bind::{closure#0}> |
2028 | | |
2029 | | /// Requires that this function's signature is already registered within |
2030 | | /// `Engine`. This happens automatically during the above two constructors. |
2031 | 1.45M | fn _new( |
2032 | 1.45M | engine: &Engine, |
2033 | 1.45M | ctx: Box<VMHostFuncContext>, |
2034 | 1.45M | signature: VMSharedSignatureIndex, |
2035 | 1.45M | trampoline: VMTrampoline, |
2036 | 1.45M | ) -> Self { |
2037 | 1.45M | HostFunc { |
2038 | 1.45M | ctx, |
2039 | 1.45M | signature, |
2040 | 1.45M | host_to_wasm_trampoline: trampoline, |
2041 | 1.45M | engine: engine.clone(), |
2042 | 1.45M | } |
2043 | 1.45M | } |
2044 | | |
2045 | | /// Inserts this `HostFunc` into a `Store`, returning the `Func` pointing to |
2046 | | /// it. |
2047 | | /// |
2048 | | /// # Unsafety |
2049 | | /// |
2050 | | /// Can only be inserted into stores with a matching `T` relative to when |
2051 | | /// this `HostFunc` was first created. |
2052 | 0 | pub unsafe fn to_func(self: &Arc<Self>, store: &mut StoreOpaque) -> Func { |
2053 | 0 | self.validate_store(store); |
2054 | 0 | let me = self.clone(); |
2055 | 0 | Func::from_func_kind(FuncKind::SharedHost(me), store) |
2056 | 0 | } |
2057 | | |
2058 | | /// Inserts this `HostFunc` into a `Store`, returning the `Func` pointing to |
2059 | | /// it. |
2060 | | /// |
2061 | | /// This function is similar to, but not equivalent, to `HostFunc::to_func`. |
2062 | | /// Notably this function requires that the `Arc<Self>` pointer is otherwise |
2063 | | /// rooted within the `StoreOpaque` via another means. When in doubt use |
2064 | | /// `to_func` above as it's safer. |
2065 | | /// |
2066 | | /// # Unsafety |
2067 | | /// |
2068 | | /// Can only be inserted into stores with a matching `T` relative to when |
2069 | | /// this `HostFunc` was first created. |
2070 | | /// |
2071 | | /// Additionally the `&Arc<Self>` is not cloned in this function. Instead a |
2072 | | /// raw pointer to `Self` is stored within the `Store` for this function. |
2073 | | /// The caller must arrange for the `Arc<Self>` to be "rooted" in the store |
2074 | | /// provided via another means, probably by pushing to |
2075 | | /// `StoreOpaque::rooted_host_funcs`. |
2076 | 78.9k | pub unsafe fn to_func_store_rooted(self: &Arc<Self>, store: &mut StoreOpaque) -> Func { |
2077 | 78.9k | self.validate_store(store); |
2078 | 78.9k | Func::from_func_kind(FuncKind::RootedHost(RootedHostFunc::new(self)), store) |
2079 | 78.9k | } |
2080 | | |
2081 | | /// Same as [`HostFunc::to_func`], different ownership. |
2082 | 0 | unsafe fn into_func(self, store: &mut StoreOpaque) -> Func { |
2083 | 0 | self.validate_store(store); |
2084 | 0 | Func::from_func_kind(FuncKind::Host(Box::new(self)), store) |
2085 | 0 | } |
2086 | | |
2087 | 78.9k | fn validate_store(&self, store: &mut StoreOpaque) { |
2088 | 78.9k | // This assert is required to ensure that we can indeed safely insert |
2089 | 78.9k | // `self` into the `store` provided, otherwise the type information we |
2090 | 78.9k | // have listed won't be correct. This is possible to hit with the public |
2091 | 78.9k | // API of Wasmtime, and should be documented in relevant functions. |
2092 | 78.9k | assert!( |
2093 | 78.9k | Engine::same(&self.engine, store.engine()), |
2094 | 0 | "cannot use a store with a different engine than a linker was created with", |
2095 | | ); |
2096 | 78.9k | } |
2097 | | |
2098 | 457k | pub(crate) fn sig_index(&self) -> VMSharedSignatureIndex { |
2099 | 457k | self.signature |
2100 | 457k | } |
2101 | | |
2102 | 78.9k | fn export_func(&self) -> ExportFunction { |
2103 | 78.9k | ExportFunction { |
2104 | 78.9k | anyfunc: self.ctx.wasm_to_host_trampoline(), |
2105 | 78.9k | } |
2106 | 78.9k | } |
2107 | | } |
2108 | | |
2109 | | impl Drop for HostFunc { |
2110 | 1.45M | fn drop(&mut self) { |
2111 | 1.45M | unsafe { |
2112 | 1.45M | self.engine.signatures().unregister(self.signature); |
2113 | 1.45M | } |
2114 | 1.45M | } |
2115 | | } |
2116 | | |
2117 | | impl FuncData { |
2118 | | #[inline] |
2119 | 0 | pub(crate) fn trampoline(&self) -> VMTrampoline { |
2120 | 0 | match &self.kind { |
2121 | 0 | FuncKind::StoreOwned { trampoline, .. } => *trampoline, |
2122 | 0 | FuncKind::SharedHost(host) => host.host_to_wasm_trampoline, |
2123 | 0 | FuncKind::RootedHost(host) => host.host_to_wasm_trampoline, |
2124 | 0 | FuncKind::Host(host) => host.host_to_wasm_trampoline, |
2125 | | } |
2126 | 0 | } |
2127 | | |
2128 | | #[inline] |
2129 | 119k | fn export(&self) -> ExportFunction { |
2130 | 119k | self.kind.export() |
2131 | 119k | } |
2132 | | |
2133 | 20.4k | pub(crate) fn sig_index(&self) -> VMSharedSignatureIndex { |
2134 | 20.4k | unsafe { self.export().anyfunc.as_ref().type_index } |
2135 | 20.4k | } |
2136 | | } |
2137 | | |
2138 | | impl FuncKind { |
2139 | | #[inline] |
2140 | 119k | fn export(&self) -> ExportFunction { |
2141 | 119k | match self { |
2142 | 40.9k | FuncKind::StoreOwned { export, .. } => *export, |
2143 | 0 | FuncKind::SharedHost(host) => host.export_func(), |
2144 | 78.9k | FuncKind::RootedHost(host) => host.export_func(), |
2145 | 0 | FuncKind::Host(host) => host.export_func(), |
2146 | | } |
2147 | 119k | } |
2148 | | } |
2149 | | |
2150 | | use self::rooted::*; |
2151 | | |
2152 | | /// An inner module is used here to force unsafe construction of |
2153 | | /// `RootedHostFunc` instead of accidentally safely allowing access to its |
2154 | | /// constructor. |
2155 | | mod rooted { |
2156 | | use super::HostFunc; |
2157 | | use std::ops::Deref; |
2158 | | use std::ptr::NonNull; |
2159 | | use std::sync::Arc; |
2160 | | |
2161 | | /// A variant of a pointer-to-a-host-function used in `FuncKind::RootedHost` |
2162 | | /// above. |
2163 | | /// |
2164 | | /// For more documentation see `FuncKind::RootedHost`, `InstancePre`, and |
2165 | | /// `HostFunc::to_func_store_rooted`. |
2166 | | pub(crate) struct RootedHostFunc(NonNull<HostFunc>); |
2167 | | |
2168 | | // These are required due to the usage of `NonNull` but should be safe |
2169 | | // because `HostFunc` is itself send/sync. |
2170 | | unsafe impl Send for RootedHostFunc where HostFunc: Send {} |
2171 | | unsafe impl Sync for RootedHostFunc where HostFunc: Sync {} |
2172 | | |
2173 | | impl RootedHostFunc { |
2174 | | /// Note that this is `unsafe` because this wrapper type allows safe |
2175 | | /// access to the pointer given at any time, including outside the |
2176 | | /// window of validity of `func`, so callers must not use the return |
2177 | | /// value past the lifetime of the provided `func`. |
2178 | 78.9k | pub(crate) unsafe fn new(func: &Arc<HostFunc>) -> RootedHostFunc { |
2179 | 78.9k | RootedHostFunc(NonNull::from(&**func)) |
2180 | 78.9k | } |
2181 | | } |
2182 | | |
2183 | | impl Deref for RootedHostFunc { |
2184 | | type Target = HostFunc; |
2185 | | |
2186 | 78.9k | fn deref(&self) -> &HostFunc { |
2187 | 78.9k | unsafe { self.0.as_ref() } |
2188 | 78.9k | } |
2189 | | } |
2190 | | } |